SAS对数据变量的处理
?
SAS對數據變量的處理
? ? ?? 在使用DATA步基于已經存在的數據集生成新數據集時,可以指定在新數據集中不需要包含的變量而僅讀取其他變量,或者指定僅需要在 新數據集中包含的變量。該功能可以通過DATA步中的SET語句和數據集選項KEEP=和DROP=來實現,也可以通過KEEP和DROP語句來實現。
1.使用數據集選項KEEP=和DROP=
使用數據集選項KEEP=和DROP=的基本形式如下:
DATA 新數據集; SET 原數據集 (KEEP|DROP=變量列表); RUN;?讀取數據集sashelp.shoes中與產品銷售相關的變量Product、Stores和Sales,建立新數據集。代碼如下:
data work.shoes_part1; set sashelp.shoes (keep=Product Stores Sales); run; proc print data=work.shoes_part1 (obs=5) noobs; run;在上面的代碼中,SET語句使用數據集選項KEEP=指定的Product、 Stores和Sales。PROC PRINT打印所生成的數據集work.shoes_part1的前5 條觀測,如下圖所示。可以看到,該數據集中包含了變量Product、 Stores和Sales。
下面使用數據集選項DROP=來實現相同的功能,代碼如下:
data work.shoes_part2; set sashelp.shoes (drop=Region Subsidiary Inventory Returns); run;? ? ?? 因為sashelp.shoes的變量包含Product、Stores、Sales、Region、Subsidiary、Inventory和Returns,所以當選項DROP=中指定了Region、 Subsidiary、Inventory和Returns時,剩下的變量Product、Stores和Sales都 會被讀取并寫入數據集work.shoes_part2。所生成的數據集 work.shoes_part2和前面示例中生成的work.shoes_part1相同。
? ? ??簡單來說,選擇使用選項KEEP=還是DROP=依賴于哪種方法會需 要指定較少的變量。但相比較而言,使用選項KEEP=會明確指明需要讀 取的變量,這樣在比較大的作業中可以避免讀取預期之外的變量。
2.使用KEEP和DROP語句?
在DATA步中,KEEP和DROP語句同樣可用于選取寫入到新數據集 中的變量。使用DROP和KEEP語句的基本形式如下:
DATA 新數據集; SET 原數據集; KEEP|DROP變量列表; RUN;在該過程中,DATA步會讀取原數據集的所有變量,但在寫入新數據集前只保留部分變量。新數據集中包含的變量由所使用的語句(KEEP語句或DROP語句)給出的變量列表確定。使用KEEP語句表示 只選取變量列表中變量,而使用DROP語句則表示選取除變量列表之外的其他所有變量。
讀取數據集sashelp.shoes中跟產品銷售相關的變量Product、Stores和Sales,建立新數據集。
下面兩段代碼分別使用KEEP語句和DROP語句來完成上述功能,生成數據集work.shoes_part3和work.shoes_part4。
代碼1:
data work.shoes_part3; set sashelp.shoes; keep Product Stores Sales; run;代碼2:
data work.shoes_part4; set sashelp.shoes; drop Region Subsidiary Inventory Returns; run;在代碼1中,DATA步會讀取數據集sashelp.shoes中的所有變量,并 選取KEEP語句指定的Product、Stores和Sales創建新數據集 work.shoes_part3。在代碼2中,DATA步的DROP語句指定了Region、 Subsidiary、Inventory和Returns,那么剩下的變量Product、Stores、Sales 會被選取寫入數據集work.shoes_part4。這里所生成的數據集 work.shoes_part3和work.shoes_part4也和work.shoes_part1相同。
使用KEEP語句還是DROP語句,與選擇使用數據集選項KEEP=還是DROP=的標準一樣。從上面的示例中可以看出,它們都可以實現相 同的功能。
開發程序時具體該怎樣選擇
(讀取速度快、效率高、不能對未保留得字段進行處理): ? 1.使用數據集選項KEEP=和DROP=
(讀取速度慢、效率差、可以多個數據集,可以對未保留得字段進行處理):2.使用KEEP和DROP語句?
3.一個DATA步中創建多個數據集
數據集選項KEEP=和DROP=除了可以在SET語句中使用之外,還可以用于DATA語句中指定的數據集。這樣就可以在一個DATA步中通過 給每個數據集使用選項KEEP=和DROP=來創建包含不同變量的多個數 據集。而KEEP和DROP語句卻實現不了該功能,因為它們會影響所有的 輸出數據集。
分別讀取數據集sashelp.shoes中關于產品銷售情況的變量
(Product、Stores及Sales)和產品庫存情況的變量(Product、Inventory 及Returns),并將這兩類變量寫入兩個數據集work.shoes_sales和 work.shoes_inventory。
代碼如下:
data work.shoes_sales (keep=Product Stores Sales) work.shoes_inventory (keep=Product Inventory Returns); set sashelp.shoes; run; proc print data=work.shoes_sales (obs=5) noobs; title "Product Sales"; run; proc print data=work.shoes_inventory (obs=5) noobs; title "Product Inventory"; run;兩個PRINT過程打印的數據集work.shoes_sales和 work.shoes_inventory中的前5條數據分別如下圖左和下圖右所示。它們分別 包含變量Product、Stores、Sales和Product、Inventory、Returns。
4.有效地使用數據集選項KEEP=和DROP=
在DATA步中,可在DATA語句和SET語句中使用數據集選項 KEEP=和DROP=。在DATA語句使用這些選項,PDV中會包括輸入數據 集中的所有變量,不過,只有當變量從PDV中寫入結果數據集時,這些 選項才會產生影響。然而,在SET語句中使用這些選項時,這些選項會 確定哪些變量要從輸入數據集中讀取到PDV中,也就是說,SAS不會將 未包括的變量讀入PDV。在數據集很大時,這種方式會使程序執行更有效率。
在上面代碼的基礎上可在SET語句中增加選項DROP=來控制變量Region和Subsidiary不被讀入PDV,以提高程序執行效率。如下:
data work.shoes_sales (keep=Product Stores Sales) work.shoes_inventory (keep=Product Inventory Returns); set sashelp.shoes (drop=Region Subsidiary); run;有時候,部分變量雖然不需要輸出到新數據集,但在進行運算處理 時卻需要用到,這時候這些變量必須被讀入PDV中,那么此時就不適合 在SET語句中使用數據集選項KEEP=和DROP=了。對于這種情況,可在 DATA語句中使用數據集選項KEEP=、DROP=,或使用KEEP、DROP 語句來實現。
小結:
重點掌握關鍵字:set、keep、drop
1、set? 表示需要建立數據集的初始數據集
2、keep、drop表示需要保留以及刪除的字段名;可以用于data 后面的數據集的命名,set初始化數據集;以及data步單獨使用。
?
轉載于:https://www.cnblogs.com/suolilian/p/10490187.html
總結
以上是生活随笔為你收集整理的SAS对数据变量的处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android 敏感词过滤器,andro
- 下一篇: 天气预报的Ajax效果