在使用data步基於已經存在的資料集生成新資料集時,可以指定在新資料集中不需要包含的變數而僅讀取其他變數,或者指定僅需要在 新資料集中包含的變數。該功能可以通過data步中的set語句和資料集選項keep=和drop=來實現,也可以通過keep和drop語句來實現。
使用資料集選項keep=和drop=的基本形式如下:
data 新資料集;讀取資料集sashelp.shoes中與產品銷售相關的變數product、stores和sales,建立新資料集。**如下:set 原資料集 (keep|drop=變數列表);
run;
data work.shoes_part1;在上面的**中,set語句使用資料集選項keep=指定的product、stores和sales。proc print列印所生成的資料集work.shoes_part1的前5 條觀測set sashelp.shoes (keep=product stores sales);
run;
proc print data=work.shoes_part1 (obs=5
) noobs;
run;
,如下圖所示。可以看到,該資料集中包含了變數product、stores和sales。
下面使用資料集選項drop=來實現相同的功能,**如下:
data work.shoes_part2;因為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相同。set sashelp.shoes (drop=region subsidiary inventory returns);
run;
簡單來說,選擇使用選項keep=還是drop=依賴於哪種方法會需 要指定較少的變數。但相比較而言,使用選項keep=會明確指明需要讀 取的變數,這樣在比較大的作業中可以避免讀取預期之外的變數。
在data步中,keep和drop語句同樣可用於選取寫入到新資料集 中的變數。使用drop和keep語句的基本形式如下:
data 新資料集;在該過程中,data步會讀取原資料集的所有變數,但在寫入新資料集前只保留部分變數。新資料集中包含的變數由所使用的語句(keep語句或drop語句)給出的變數列表確定。set 原資料集;
keep|drop變數列表;
run;
使用keep語句表示 只選取變數列表中變數,而使用drop語句則表示選取除變數列表之外的其他所有變數。
讀取資料集sashelp.shoes中跟產品銷售相關的變數product、stores和sales,建立新資料集。
下面兩段**分別使用keep語句和drop語句來完成上述功能,生成資料集work.shoes_part3和work.shoes_part4。
**1:
data work.shoes_part3;**2:setsashelp.shoes;
keep product stores sales;
run;
data work.shoes_part4;在**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相同。setsashelp.shoes;
drop region subsidiary inventory returns;
run;
使用keep語句還是drop語句,與選擇使用資料集選項keep=還是drop=的標準一樣。從上面的示例中可以看出,它們都可以實現相 同的功能。
開發程式時具體該怎樣選擇
(讀取速度快、效率高、不能對未保留得字段進行處理): 1.使用資料集選項keep=和drop=
(讀取速度慢、效率差、可以多個資料集,可以對未保留得字段進行處理):2.使用keep和drop語句
資料集選項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);兩個print過程列印的資料集work.shoes_sales和work.shoes_inventory中的前5條資料分別如下圖左和下圖右所示。它們分別 包含變數product、stores、sales和product、inventory、returns。setsashelp.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;
在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);有時候,部分變數雖然不需要輸出到新資料集,但在進行運算處理 時卻需要用到,這時候這些變數必須被讀入pdv中,那麼此時就不適合 在set語句中使用資料集選項keep=和drop=了。對於這種情況,可在data語句中使用資料集選項keep=、drop=,或使用keep、drop 語句來實現。set sashelp.shoes (drop=region subsidiary);
run;
重點掌握關鍵字:set、keep、drop
1、set 表示需要建立資料集的初始資料集
2、keep、drop表示需要保留以及刪除的欄位名;可以用於data 後面的資料集的命名,set初始化資料集;以及data步單獨使用。
資料處理 SAS程式對資料整合
讀入資料,生成sas資料集work.productapurchase work為sas預設的工作邏輯庫,引用其中的資料集時可省略 work.data productapurchase infile e data ch2 productapurchase.csv delimiter firstobs ...
sas筆記 第二 三節 對資料檔案的處理
管理方式 邏輯庫名.資料集名 或其他型別的sas檔案 如何理解 sas的邏輯庫?1 在windows 下,sas的每乙個邏輯庫對映著系統中的乙個資料夾。滑鼠右鍵檢視屬性可以看到具體在哪個盤的路徑 2 若看到存放的是臨時資料夾,則稱為是臨時庫 關掉sas系統就刪除的 唯一的臨時庫是work 互動方式 ...
SAS學習 選取資料集的部分變數
實現目標 從sashelp邏輯庫中的shoes資料集中選取部分變數到新的資料集 shoes資料集所包含的資料 部分 如下圖所示 1 在set語句中使用資料集選項keep 和drop 選項keep 表示只讀取變數列表中的變數,而選項keep 表示讀取除變數列表中列出的變數之外的其他所有變數。data ...