如何在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

等。代码的数量将在未来变化。

我尝试应用call execute函数,但无法通过它传递数字…也许是do循环?

根据sasrd的答案,您可以使用散列表:

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,而不是使用by-group。确保code_num按照某种逻辑顺序排序。您可以先使用proc sortnotsorted选项,如果它总是按正确的顺序。

不需要拆分数据集来处理部分数据。只需使用WHERE语句。

proc surveyselect data=code ..... ;
  where code_num = "123456789";
  ...
run;

如果数据是排序的(或索引的),你可以经常使用BY语句来单独处理每一组。

proc surveyselect data=code ..... ;
  by code_num ;
  ...
run;

最新更新