- 洞察大數據價值:SAS編程與數據挖掘
- 楊池然 劉璐
- 8955字
- 2020-06-04 15:26:49
4.1 數據步概述
數據步是SAS系統處理數據的核心部分,正如建一座大樓,打地基的過程就相當于數據步的過程。無論用SAS的哪個模塊做應用研究和分析處理,首先都要有正確而有效的數據。數據步處理數據的優劣直接影響到其他模塊分析的正確與否。其他模塊都是SAS工具已經圖形化了的模塊,不需要去處理什么,只需要知道怎么運用這些模塊,根據業務需求,通過模塊功能調用數據進行分析處理即可。
4.1.1 數據步的作用
SAS系統有兩大步,稱為數據步和過程步。所謂數據步就是一個動態處理數據的過程,處理數據的目的是生成SAS系統能識別的數據集,數據集默認擴展名為“.sas7bdat”。
數據步處理完成后會生成一個數據表,這個數據表在SAS系統里稱為數據集,所生成的數據就相當于關系數據庫中的一個二維表,有行有列。數據集的屬性如圖4-1所示,數據集上顯示數據集名“people”,當前數據集存儲的邏輯庫為“work”,數據集包含的列屬性為id、popucount和city三個列字段稱為變量,每一列對應相應的數據,行記錄標識可以看到此數據集有7條記錄,每一行為一條記錄。

圖4-1 數據集屬性
數據集中的變量具有如下屬性。
數據步處理數據是一個動態過程,為便于理解數據步的動態過程,可參考圖4-2所示的數據步處理數據動態流程圖。

圖4-2 數據步動態執行機制
數據步動態流程圖顯示了數據步在SAS系統執行的機制,寫好的數據步程序提交給SAS系統后,SAS系統首先對程序進行編譯,在編譯階段進行語法檢查,如果有語法錯誤,SAS系統就會停止當前程序,LOG日志會顯示錯誤信息;如果程序正確,就在編譯階段創建輸入緩沖區,用來存儲當前數據步處理的外部文件數據或數據塊中的數據,同時創建PDV(Program Data Vector)指針,通過PDV指針控制讀入數據,然后執行數據步中的語句,對數據文件或數據塊中的數據進行讀取,自循環判斷是否仍有數據未讀取,當數據文件或數據塊中沒有數據記錄了,就結束當前數據步,生成數據集存儲到邏輯庫對應的目錄中,繼續執行其他數據步或過程步。
動態數據集生成過程演示如圖4-3所示。

圖4-3 動態生成數據集
原始數據經過數據步程序處理,在數據步創建數據集名、變量名,讀入當前數據記錄,然后循環判斷是否有數據,直到數據步再沒有數據讀入為止,這時生成數據集結束。
通過上面分析,歸納得出數據步的作用就是處理外部數據文件或數據塊中的數據或對已經生成的數據集再處理等,數據步結束后生成數據集。
4.1.2 數據步基本語句應用
為便于掌握數據步,首先要理解數據步語法定義,數據步以“DATA”關鍵字為開始標識,以“RUN”語句為結束標識,每個語句的結束符號為“;”,具體數據步語法定義如下。
數據步語法:

表4-1為數據步語句的操作說明。
表4-1 數據步操作說明

為對數據步有一個整體認識,下面舉一個簡單例子。
【例4.1】創建a數據集。

【程序解讀】
此實例雖然簡單,但體現了數據步創建數據集的實現方式,a是定義的數據集的名字,name=’liulu’是對變量name的賦值語句,將’liulu’賦值給變量name,為字符類型,SAS是弱類型語言,不需要先定義。
數據步所創建數據集中的變量是具有屬性的,一個完整的數據集生成的過程中需要先對變量屬性識別,數據集中的變量表4-2所示的屬性。
表4-2 數據集變量具有的屬性

變量是所創建數據集中定義的變量,所定義的變量具有變量名、類型、長度、輸入格式和輸出格式等屬性。
【例4.2】數據步中變量的定義。

【程序解讀】
1)此實例數據步創建數據集ycr時定義了三個變量,分別是name、phone和time。變量name的屬性為字符型,長度為10個字節;變量phone的屬性為數值型;time的輸入格式為“date9.”
2)format函數定義了變量time的輸出格式為“yymmdd10.”。
程序運行完成,輸出顯示窗口如圖4-4所示。

圖4-4 ycr數據集輸出顯示窗口
數據集與邏輯庫的關系:數據步動態執行的過程中所創建的數據集是存儲到對應的邏輯庫中的,這是SAS系統管理數據集的方式,通過邏輯庫可以找到此邏輯庫下具有的數據集。數據集對應邏輯庫分臨時邏輯庫與永久邏輯庫兩類,數據集默認存儲在work臨時邏輯庫中,SAS系統關閉退出時數據集刪除;對于需要永久保存的數據集要存儲到所建立的永久邏輯庫中,通過永久邏輯庫把數據集存儲到對應的物理路徑文件夾下。邏輯庫與數據集的關系見表4-3。
表4-3 邏輯庫與數據集關系

(1)SAS系統默認數據集存儲在Work臨時邏輯庫中
Work臨時邏輯庫用來存儲不需要永久保存的數據集,運行SAS程序時如果數據集沒有指明對應邏輯庫,則默認存儲在Work邏輯庫中。當退出SAS系統時,Work臨時邏輯庫中的數據集就會清除。
指定數據集存儲到Work邏輯庫方法:

說明:Work表示邏輯庫名,可以省略,默認存儲到此邏輯庫下。數據集名表示給數據集起名字,相當于表名,不指定數據集名默認為Data1。
【例4.3】數據集存儲到Work臨時邏輯庫。

【程序解讀】
數據集liu存儲到work臨時邏輯庫中,當退出SAS系統后,work臨時邏輯庫對應的數據集自動刪除。臨時邏輯庫一般用來存儲數據處理過程中臨時使用的數據集,不需要保存,這樣可以節省物理存儲空間。
(2)數據集存儲到永久邏輯庫
實際開發中經常需要把重要的數據集永久保存下來,存儲到指定目錄,需要指定永久邏輯庫名,數據集存儲到永久邏輯庫的方法:
1)創建永久邏輯庫:

2)引用永久邏輯庫,邏輯庫相當于一座橋,把數據集和物理路徑建立了連接,存儲到指定的物理路徑目錄下,通過二級連接名建立連接:

說明:邏輯庫名表示定義的永久邏輯庫名,不能省略;數據集名表示給數據集起的名字。
【注意】邏輯庫名與數據集名通過英文輸入法下的“.”(點)建立連接。
【例4.4】數據集存儲到物理路徑“d:\sastest”目錄下,數據集名為lu。


【程序解讀】
數據步執行時的機制:
1)先創建永久邏輯庫xy。
2)執行DATA數據步,先對數據步程序進行編譯,進行語法檢查,程序編譯通過后開始創建輸入緩沖區和PDV指針,xy.lu把數據集lu存儲到與邏輯庫xy相匹配的物理路徑“d:\sastest”文件夾下,input語句創建變量,通過PDV指針讀取cards語句后的第一條數據,放入輸入緩沖區,判斷是否還有數據。如果沒有則生成數據集結束。SAS系統關閉退出后數據集存儲到永久邏輯庫對應目錄“d:\sastest”文件夾下。
數據步中一次可以創建多個數據集,實際應用中經常根據條件,選擇不同的數據輸出到不同的數據集。
語法格式:

【注意】數據步一次創建多個數據集,數據集名之間以空格分隔。
【例4.5】已知外部文件存儲在“d:\sastest\rk.dat”的目錄下,此數據集為人口普查數據集,請把此數據文件中北京和上海兩個城市的數據放在一起,生成數據集名為bjsh,其他城市的數據信息生成數據集名為qita,數據集存儲到“d:\sastest”目錄下。
打開外部數據文件rk.dat,數據如圖4-5所示。

圖4-5 外部數據文件rk.dat


【程序解讀】
數據步通過if條件語句判斷city變量,把in(“北京”,”上海”)語句中符合條件的數據通過OUTPUT語句輸出到數據集xy.bjsh,不符合條件的輸出到數據集xy.qita。程序運行完成,兩個數據集存儲到指定目錄,為便于驗證數據是否生成到對應數據集,執行已打印輸出程序,把北京和上海兩個城市的數據打印輸出到窗口。輸出窗口顯示此數據集只有北京和上海兩個城市信息,如圖4-6所示。

圖4-6 bjsh數據集信息顯示窗口
對于有上百個列變量的數據,為了節省存儲,所創建的數據集有些列變量是保留的,有些列變量不需要保留。數據步中通過KEEP語句保留需要的列變量。
數據集引用KEEP語句的語法格式:

keep=語句可以指明所創建的數據集要保留的變量,多個變量之間以空格分隔。
【例4.6】取出學生信息中的學號、姓名、聯系方式三個信息,建立數據集keep_stu。

【程序解讀】
數據步執行時先在內存中生成包含所有變量的數據集,然后通過keep=id name mobile取保留變量,多個變量之間以空格分隔。當前所創建數據集只包含列變量id(學號)、name(姓名)和mobile(聯系方式)。
對于所創建的數據集,如果刪除的列變量少,保留的列變量多,為了程序的可讀性,可通過DROP語句刪除不需要的列變量,DROP語句實現了與KEEP語句功能相反的作用。
DROP語句刪除數據集變量的語法格式:

drop=語句可以指明所創建的數據集要刪除的變量,多個變量之間以空格分隔。
【例4.7】對【例4.6】進行改造,通過DROP語句剔除不需要的變量,創建符合條件的數據集。

【程序解讀】
此程序通過drop=sex mobile語句去掉不需要的變量,實現了創建符合條件數據集的要求。
【注意】KEEP參數選項和DROP參數選項不能在一個數據集中同時使用。KEEP語句與DROP語句對變量處理的方式相同,只是KEEP語句保留變量,DROP語句剔除變量。
數據步若只做數據處理,不建立數據集,則需要把數據集的名字命名為“_NULL_”,以此來告訴SAS系統不創建數據集,只是做數據處理。
數據步只做數據處理的語法格式:

【例4.8】不創建數據集,根據數值類型變量x和y,求x+y的和,結果賦值給數值型變量z。


【程序解讀】
此數據集名為_null_,告訴SAS系統不創建數據集,只是執行數據步中的SAS處理語句,求x+y的和,通過put語句把求和結果輸出到日志窗口顯示,如圖4-7所示。

圖4-7 不建立數據集日志顯示窗口
數據步用來修改與選擇觀測語句,可以在數據步中進行計算、數據集修改、對數據集觀測子集選擇以及輸出控制等。具體見表4-4。
表4-4 數據步修改語句與數據集選擇觀測記錄語句

以上語句眾多,只對經常用的詳細講解,其他不經常用到的讀者可以查看SAS幫助文件。
(1)DELETE語句
Delete語句可以清空數據集,可以把符合條件的數據從數據集中刪除。
【例4.9】DELETE語句清空數據集的應用。


【程序解讀】
數據步程序執行到delete語句會把數據集qk中所有觀測記錄刪除,即清空數據集qk。對于一些過渡的數據集,只是做中間處理用,經常用delete語句清空當前數據集,以節省存儲空間。
【例4.10】DELETE語句刪除數據集中符合條件的記錄。

【程序解讀】
數據集在創建的過程中讀入if type='B'語句,對于符合條件的數據執行delete語句,從數據集中刪除。Delete語句可以用來過濾數據集中的數據。
(2)STOP語句
STOP語句對處理的當前數據步起到強制停止作用,當前數據步遇到STOP語句時,正處理的數據不會被添加到新數據集。
【例4.11】STOP語句停止當前數據步。

【程序解讀】
此數據步程序通過數據步自動變量_n_記錄的觀測序號控制讀入觀測記錄,當_n_=5(即觀測序號為5)時停止當前數據步,此時數據集中第五個觀測序號的數據沒有添加到數據集stopsj,數據集stopsj只有四條觀測記錄。
(3)ABORT語句
當數據步執行過程中遇到ABORT語句時,可以終止并跳出當前數據步,繼續執行其他數據步或過程步。
【例4.12】ABORT語句對當前輸入錯誤的數據給予終止,繼續執行下一個數據步或過程步。

【程序解讀】
if語句中的_error_記錄錯誤信息,當_error_=1時,顯示讀取存在錯誤,執行abort語句結束當前數據步,繼續執行下面的打印過程步。數據集abortsj只有一條記錄。
(4)WHERE語句
WHERE語句對處理的數據集根據條件過濾,where語句后面可以匹配的表達式見表4-5。
表4-5 where語句表達式

理解WHERE語句具有的表達式是靈活運用WHERE語句的前提,下面結合實例對WHERE語句表達式進行詳細解讀。
【例4.13】根據where語句中“變量名=變量值”過濾數據集。


【程序解讀】
對數據集lu,通過where type='及格'條件進行過濾,把type='及格'的觀測取出來,建立數據集where。
【例4.14】根據where語句中“between and”表達式過濾數據集。

【程序解讀】
根據price變量的價格過濾,取值范圍為[5,10]的閉區間,包括開始值和結束值。
【例4.15】is null和is missing語句寫法一樣,可以通過對【例4.14】改造來講解Where語句查找價格為空的觀測數據。

【程序解讀】
where語句查找price價格為空的觀測數據,建立數據集sqnull。也可以通過“where price is missing”語句替換,達到查找數據集中缺失值的目的。
【例4.16】like語句屬于模式匹配的語句,對【例4.13】進行改造,把姓“李”的找出來。

【程序解讀】
where語句根據name變量,通過like模式匹配語句'李%',把以“李”開始后面含有多個字符的姓名查找出來。對于like語句否定的形式可以寫成not like,可以取出不以“李”姓開始的姓名。
【例4.17】對same and語句可以和上面的條件語句一起使用,可以起到增加條件判斷的功能。對【例4.14】的where語句進行改造,實現同樣的功能。

【程序解讀】
對同一個程序不同的改造可以對比發現哪條語句效率更高,這也是學習SAS語言的又一種好的方式。此列通過借助same and條件實現了【例4.14】的功能。
【例4.18】in語句可以取常值,屬于幾何范圍,對【例4.14】程序進行改造,取出sg變量對應水果為“橘子”和“草莓”的觀測數據。

【程序解讀】
in語句是取此變量包含對應常值的觀測,屬于離散型變量,要做到舉一反三,in的對立面是不在這個范圍內的,上面程序若取出水果中去掉“橘子”和“草莓”的觀測數據,條件語句可以改寫為:

以上知識點結合實例詳細地講解了如何創建數據集,上面的程序輸入到編輯程序窗口運行,就可以直觀感受建立數據集的各項功能,從感性認識上升到SAS語言處理的理性認識,要在改造程序中去學習和體驗數據步的每一個知識點和功能點。
4.1.3 數據集整理
數據集整理是對已經生成的數據集再處理,就相當于蓋一座大樓,打地基時需要每塊磚的融合和搭配才能把地基建好。一個磚就相當于一個數據集,磚與磚根據需求互相搭配和融合的過程就相當于數據集之間的數據整理的過程,生成符合需求的數據集。歸納得出數據集整理是對數據集的再處理,相當于再加工,根據業務需求生成滿足業務的數據集。
數據集整理常用語句見表4-6。
表4-6 常用數據集整理語句

下面對數據集整理的每一個語句知識點進行詳細講解,以便于靈活運用這些語句,做到舉一反三。
1.SET語句整理數據集
SET語句對生成的一個或多個數據集進行處理,可以實現對多個數據集復制或縱向合并等功能。在讀取數據集時嚴格按照數據集動態生成機制處理數據集,每一個觀測先讀入到PDV指針中,多個數據集需要多個PDV指針控制,處理機制不變。
語法格式:

該語句功能是復制數據集或縱向合并數據集。其語句說明見表4-7。
表4-7 SET語句說明

●END=變量名:規定臨時變量,作為文件結束的標識。
●POINT=變量名:指定讀入數據集觀測序號。
●KEY=索引名:創建一個新自動變量_IORC_,顯示I/O操作的觀測序號。
●KEY=UNIQUE:從數據集索引開頭開始搜索。
【注意】SET語句處理數據集時是先對原數據集讀取,把讀取的數據逐條放到PDV中,然后輸出到一個新數據集中,占用了兩個存儲空間,一個原數據集存放空間和一個新數據集存放空間,直到數據處理完成,才刪除原始數據集。SET處理數據集的過程中產生了一個副本數據集。
(1)SET語句的調用
SET語句中選項比較多,但調用方式一樣,下面對point=選項通過實例進行講解,其他選項可以通過改造此實例來理解運用。
【例4.19】POINT=選項應用,取指定的一條觀測記錄。

【程序解讀】
1)數據步首先生成數據集point,然后執行下一個數據步。
2)第二個數據步編譯后,執行n=3語句,變量n被賦值為3。
3)讀入SET語句中的數據集,直接取point=3的第三條觀測記錄,其他記錄跳過。
4)執行output語句把第三條觀測記錄輸出。
5)執行stop語句結束當前數據步。
【注意】point=選項要和stop語句配合使用,否則數據步會繼續SET語句判斷,產生死循環。同時要注意point=后面是變量,不是常數。
(2)SET語句實現復制數據集
所謂復制數據集是對原數據集的再處理,生成新的數據集,新數據集具有原數據集的屬性,只是生成的新數據集是滿足業務需求的數據集。
數據集復制動態流程演示如圖4-8所示。

圖4-8 SET語句復制數據集流程
數據集a通過數據步程序的SET語句復制變量class和name兩列,生成數據集b,數據集b具有數據集a的數據屬性。觀察此流程圖可以看到數據集b中的class和name兩變量對應列的數據和數據集a中的class和name兩變量的列數據相同。
【例4.20】數據集student,根據業務需求,只保留班級和姓名兩變量,建立數據集stu。

【程序解讀】
SET語句對student數據集進行復制,通過keep=語句保留變量class和name,程序運行完成。輸出窗口顯示數據集只有class和name兩個字段,如圖4-9所示。

圖4-9 復制數據集輸出顯示窗口
(3)SET語句的處理
SET語句可以對復制的數據集中的變量進行處理,根據需求引入函數對所復制數據集變量進行處理,這說明SET語句與其他SAS語句可以聯合應用作用于數據集,生成新數據集。
【例4.21】求【例4.20】數據集student中每位學生三門課的總成績,生成數據集stu_total。

【程序解讀】
SET語句讀入要處理的數據集student,然后SUM求和函數對讀入的數據集變量chines、Enlish和math數據求和,賦值給變量total。
程序運行完成,輸出窗口顯示通過函數SUM求出學生三門課的總成績,如圖4-10所示。

圖4-10 stu_total數據集輸出顯示窗口
(4)SET語句的合并
SET語句可以實現相同屬性數據集縱向合并,對兩個或多個相同屬相的數據集合并成一個數據集。實際開發中經常遇到相同屬性數據集分成幾個數據集存儲,為便于分析數據集,需要對數據集合并,縱向合并數據集流程演示如圖4-11所示。

圖4-11 縱向合并數據集流程演示圖
縱向合并數據集演示可以看出合并后的數據集記錄總條數為數據集a和數據集b的總和,生成新數據集c,變量名沒有變,只是數據合并到一個新數據集c中。
【例4.22】請把公司兩個運營部門各自的員工信息數據集合并成一個新數據集,數據集名為mergeemp。

【程序解讀】
SET語句對employee1和employee2兩個數據集縱向合并,兩個數據集的變量名相同,新數據集屬性與原數據集屬性一致,合并后的數據集mergeemp數據記錄為employee1和employee2兩個數據集記錄的和。
【注意】SET語句縱向合并數據集的條件是兩個數據集的結構必須一樣,列變量相同。合并后的數據集為兩個數據集記錄的和。
(5)SET語句引入條件語句
SET語句可以引入WHERE條件語句過濾數據集,提取出滿足條件的數據。WHERE語句首先對數據集處理,滿足WHERE語句條件的數據取出來放入輸入緩沖區,然后PDV指針繼續查找下一條記錄,直到把所有符合條件的數據取出來,處理完畢后生成新數據集。
【例4.23】個人信用卡開卡等級評分量表,請根據等級評分量表把評定級別為優和特優的客戶找出來,建立數據集superior。
個人信用評級分值區間和個人開卡信息見表4-8和表4-9。
表4-8 個人信用評級分值區間

表4-9 個人申請信用卡開卡信息

根據申請信用卡信息創建credit數據集。


【程序解讀】
where=(ratings>=85)首先把評級分值大于等于85的客戶提取出來,然后放入輸入緩沖區,繼續提取符合條件的數據,直到把所有符合條件的數據提取出來,然后生成數據集superior。
(6)SET語句引入參數
SET語句可以引入FIRSTOBS=和OBS=選項參數控制提取數據集的記錄。
●FIRSTOBS=:指定從數據集的第幾條記錄開始提取數據記錄。
●OBS=:指定讀取到數據集的第幾條記錄結束。
【例4.24】從手機用戶信息數據集mobile中第3條開始取記錄,到第6條記錄結束,建立數據集mob。

【程序解讀】
SAS執行時首先對數據集mobile根據firstobs=3和obs=6把數據集中的記錄從第3條提取到第6條結束,然后通過SET語句復制內存緩沖區的數據,生成新數據集mob。
(7)SET語句給列變量改名字
SET語句可以引入RENAME語句選項給列變量改名字。實際開發中如果在合并多個數據集時數據集屬性相同,只是有的列變量名不同,需要用RENAME語句修改列變量名,統一要合并數據集的列變量名,然后才能合并數據集。
修改列名的語法格式:

語句功能是對數據集中的列變量名進行修改。
下面通過兩種方式對比修改列名,一種是直接在創建數據集時修改列變量名,另一種是通過SET語句引入RENAME語句選項修改列變量名。
【例4.25】創建數據集時把employee2數據集的id變量名改名為department變量名。

【程序解讀】
此處RENAME用在了INPUT語句后面,對數據集中的列變量名進行了修改,【例4.26】將把RENAME語句用在SET語句中,也可以起到同樣的效果。對比中學習編程更能理解SAS語言的不同之處。
【例4.26】請把員工部門employee2數據集中的變量id改為department,然后合并員工部門employee1、employee2數據集,生成新數據集mergeep。


【程序解讀】
SAS系統先對合并的數據集通過rename=語句修改列名,統一變量名后通過SET語句合并數據集。
(1)MERGE語句整理數據集
語法格式:

語句功能:實現數據集的橫向合并。
MERGE語句說明見表4-10。
表4-10 MERGE語句說明

MERGE語句將兩個或多個數據集進行橫向合并,所謂的橫向合并就是兩個不同的數據集拼接在一起。實際應用中可能一個表數據列變量太多,可以把數據存儲在兩個數據集中,通過MERGE合并,得到完整數據集。橫向合并數據集流程演示如圖4-12所示。

圖4-12 橫向合并演示圖
【注意】MERGE與SET語句區別:MERGE語句實現橫向合并;SET語句是將兩個或多個數據集縱向合并,SET語句還有復制數據集的功能。
MERGE語句在橫向合并數據集時分為一對一合并和匹配合并兩種。
1)MERGE一對一橫向合并數據集,所謂橫向合并是對兩個或多個數據集橫向拼接成一個數據集,將兩個或多個數據集中的第一條觀測記錄合并成新數據集的第一條觀測記錄,第二條觀測記錄合并成新數據集的第二條觀測記錄,依次類推,沒有的用缺失值替代。
【例4.27】生物實驗中一個anmal數據集(見表4-11)中記錄了實驗動物的編號和動物名,另一個anmtest數據集(見表4-12)中記錄了實驗動物所吃飼料名、時間長度和體重增加量。橫向合并數據集,生成新數據集anmal_test。
表4-11 anmal數據集

表4-12 anmtest數據集



【程序解讀】
兩個數據集橫向一對一合并時記錄條數相同,合并后數據集如圖4-13所示。

圖4-13 橫向合并后的anmal_test數據集信息
2)MERGE語句匹配合并,根據BY語句指定的公共變量的值實現橫向合并,此處的BY語句中的變量相當于一個表的主鍵,也就是根據主鍵橫向合并,要先對公共變量進行排序,然后再進行合并。
【例4.28】信用卡信息分為信用卡客戶信息數據集credit_cust(見表4-13)和積分信息數據集credit_score(見表4-14),根據卡號橫向合并客戶信息數據集和積分信息數據集,生成新數據集cust_score。
表4-13 客戶信息數據集credit_cust

表4-14 積分信息數據集credit_score



【程序解讀】
對數據步生成的數據集credit_cust和credit_score根據card_id進行排序,然后通過數據步中的merge語句根據card_id變量匹配合并數據集。
(2)MODIFY語句整理數據集
語法格式:

語句功能:對已經創建好的數據集進行修改,不能修改SAS數據集的描述部分,如添加一個新變量。可以對已經存在的數據集替換、刪除和追加觀測。MODIFY語句可以通過DATASETS過程修改數據集。MODIFY語句說明見表4-15。
表4-15 MODIFY語句說明

MODIFY語句修改數據集中的某個變量的屬性,可以對變量類型進行修改。MODIFY語句修改主數據集時是在PDV指針中直接修改的,不需要另外輸出到第二個數據集,不需要產生副本數據集。是對原數據集上的處理。用時要注意,如果修改數據集時突然異常中斷,可能會造成數據的丟失。
【例4.29】修改信用卡客戶數據集,把變量卡號的數據類型改為$16.。


【程序解讀】
調用datasets過程,此過程通過MODIFY語句修改數據集合credit_cust1中的變量card_id,定義輸出格式為“$16.”。
(3)UPDATE語句整理數據集
語法格式:

語句功能:一個數據集更改另一個數據集,可以添加新變量。UPDATE語句說明見表4-16。
表4-16 UPDATE語句說明

UPDATE語句可以對原數據集有錯誤的數據進行更正,通過一個修改數據集中的觀測修改主數據集。
【注意】UPDATE語句一定要和BY語句一起使用,主數據集中的共同變量必須是唯一值,副數據集根據共同變量的觀測修改主數據集。
【例4.30】對【例4.28】生成的客戶信息數據集credit_cust作為主數據集,積分信息數據集credit_score作為副數據集,生成cust_infor數據集。

【程序解讀】
根據card_id,通過update語句用credit_score更新數據集credit_cust。
【注意】UPDATE語句修改數據集先對數據集排序,與BY語句一起使用。主數據集中BY語句指定的公共變量必須是唯一值,當主數據集根據指定公共變量進行更新時,如果主數據集里有重復記錄,只更新重復記錄的第一條記錄即可。
- 構建高質量的C#代碼
- R Data Mining
- PowerShell 3.0 Advanced Administration Handbook
- 現代機械運動控制技術
- 西門子S7-200 SMART PLC實例指導學與用
- Storm應用實踐:實時事務處理之策略
- Docker on Amazon Web Services
- Windows Server 2003系統安全管理
- 液壓機智能故障診斷方法集成技術
- 中文版AutoCAD 2013高手速成
- Mastering Predictive Analytics with scikit:learn and TensorFlow
- 實戰Windows Azure
- 分布式Java應用
- 玩轉PowerPoint
- Wireshark Revealed:Essential Skills for IT Professionals