[英]How can I split a dataset into multiple datasets based on a column (which consists of groups) in sas
例如,代碼如下所示:
data work.code;
input code_num $9. qty ;
datalines;
123456789 49
123456789 384
123456789 37
123456789 485
123456780 34
123456780 567
123456780 23
123456780 543
123456788 21
123456788 876
123456788 54
123456788 987
;
run;
我想根據 code_num 變量將這個數據集分解成多個數據集:
data code_num_1
123456789 49
123456789 384
123456789 37
123456789 485
data code_num_2
123456780 34
123456780 567
123456780 23
123456780 543
等等,以后代碼量會有所不同。
我嘗試應用調用 execute function 但無法通過它傳遞數字...也許是一個 do 循環?
從 SASnrd 改編這個答案,你可以使用 hash 表:
https://sasnrd.com/sas-split-dataset-by-group/
data _null_;
if(_N_ = 1) then do;
if(0) then set code;
dcl hash h(dataset:"code(obs=0)", multidata:'Y');
h.definekey(all:'Y');
h.definedata(all:'Y');
h.definedone();
end;
do until(last.code_num);
set code;
by code_num;
h.add();
end;
id+1;
out = cats('code_num_', id);
h.output(dataset:out);
h.clear();
run;
唯一的區別是我們為每個數據集名稱創建一個唯一的 ID,而不是使用按組。 確保code_num
按某種邏輯順序排序。 您可以先使用proc sort
或notsorted
選項(如果它始終處於正確的順序)。
無需拆分數據集即可處理部分數據。 只需使用 WHERE 語句。
proc surveyselect data=code ..... ;
where code_num = "123456789";
...
run;
如果數據已排序(或索引),您通常可以只使用 BY 語句來分別處理每個組。
proc surveyselect data=code ..... ;
by code_num ;
...
run;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.