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