我如何根据SAS中的列(由组组成)将数据集拆分为多个数据集

发布于 2025-01-22 05:04:11 字数 535 浏览 0 评论 0原文

例如,对于代码,看起来像这样:

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

和等。将来代码的量会有所不同。

我尝试应用呼叫执行函数,但无法通过它来传递数字...也许是do循环?

For example for code looks like this:

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;

I would like to break up this dataset into multiple datasets based on the code_num variable:

data code_num_1
123456789 49
123456789 384
123456789 37
123456789 485

data code_num_2
123456780 34
123456780 567
123456780 23
123456780 543

and etc. The amount of codes will vary in the future.

I tried applying the call execute function but cannot pass numbers through it...maybe a do loop?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

冷弦 2025-01-29 05:04:11

从SASNRD调整此答案,您可以使用HASH表:

https: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选项,如果始终处于正确的顺序。

Adapting this answer from SASnrd, you can use a hash table:

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;

The only difference is that we're creating a unique ID for each dataset name rather than using the by-group. Be sure that code_num is sorted in some logical order. You can use proc sort first or the notsorted option if it's always in the right order.

舂唻埖巳落 2025-01-29 05:04:11

无需将数据集拆分以与部分数据一起使用。只需使用一个语句即可。

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

如果数据被排序(或索引),则通常可以使用语句单独处理每个组。

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

No need to split the dataset to work with part of the data. Just use a WHERE statement.

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

If the data is sorted (or indexed) you can frequently just use a BY statement to treat each group separately.

proc surveyselect data=code ..... ;
  by code_num ;
  ...
run;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文