我如何根据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
和等。将来代码的量会有所不同。
我尝试应用呼叫执行函数,但无法通过它来传递数字...也许是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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
从SASNRD调整此答案,您可以使用HASH表:
https:https:// sasnrd。 com/sas-split-dataset-by-group/
唯一的区别是,我们为每个数据集名称创建一个唯一的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/
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 useproc sort
first or thenotsorted
option if it's always in the right order.无需将数据集拆分以与部分数据一起使用。只需使用一个语句即可。
如果数据被排序(或索引),则通常可以使用语句单独处理每个组。
No need to split the dataset to work with part of the data. Just use a WHERE statement.
If the data is sorted (or indexed) you can frequently just use a BY statement to treat each group separately.