簡體   English   中英

如何根據 sas 中的列(由組組成)將數據集拆分為多個數據集

[英]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 sortnotsorted選項(如果它始終處於正確的順序)。

無需拆分數據集即可處理部分數據。 只需使用 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM