sas - 数据步骤中的多个 by 语句?
问题描述
我已经找到了解决问题的方法,但我想知道到底发生了什么,为什么,或者是否有以下解决方法:
假设你有:
data test;
length group $20.;
subject=1; hours=0; group= 'hour 1'; output;
subject=1; hours=1; group= 'hour 15'; output;
subject=1; hours=2; group= 'hour 15'; output;
subject=2; hours=0; group= 'hour 1'; output;
subject=2; hours=1; group= 'hour 15'; output;
subject=2; hours=2; group= 'hour 15'; output;
run;
你首先按小时排序,然后分组,因为它是字符,否则不会正确排序。
proc sort data=test;
by subject hours group;
run;
现在,当您运行此代码以仅检索每个组的第一条记录时:
data test2;
set test;
by subject hours group;
if first.group;
run;
它将打印每条记录。
我最近了解到‘当您在 BY 语句中使用多个变量时;如果链接到主要 BY 变量的第一个/最后一个变量更改为 1,则链接到第二个 BY 变量的第一个/最后一个变量也将更改为 1。因此,当然,由于 hours 变量发生变化,组中的第一个/最后一个也被重置。
那么“为什么”这段代码运行良好?
data test2;
set test;
by subject group;
if first.group;
run;
不得不省略你排序的变量似乎有点奇怪,而且它看起来不那么灵活,你不能使用宏变量列表作为输入来排序和数据步骤中的语句,例如...... ? 如果这就是它的方式,是否有另一种首选方式来进行此类操作?我可以看到自己经常犯这个错误,只需复制粘贴排序变量列表......
解决方案
如果要使用 BY 语句生成 FIRST。最后。未实际排序的分组变量的变量,然后在 BY 语句中使用 NOTSORTED 关键字。
例如,您可能希望按 HOUR 对数据进行排序,然后按 STATUS 对其进行分组,以便您可以了解它们在什么时间转换到该 STATUS。
data have;
input subject hour status $;
cards;
1 0 C
1 1 B
1 2 B
1 3 D
2 0 A
2 1 D
2 2 D
;
data want ;
set have ;
by subject status notsorted;
if first.status;
run;
结果:
Obs subject hour status
1 1 0 C
2 1 1 B
3 1 3 D
4 2 0 A
5 2 1 D
推荐阅读
- algorithm - 选择不相邻的单元格:算法的时间复杂度
- python - 如何制作 C++ 数组的动画颜色图?导出到 Python 并使用 \matplotlib?
- apache-kafka-streams - 如何处理 Kafka 流中的处理异常?
- c# - 为 monday.com 编写 GraphQL
- python-3.x - 比较三个数据框并根据条件在其中一个数据框中创建一个新列
- apache-spark - 无头模式下 HDP 3.1 上的 spark 3.x 与配置单元 - 未找到配置单元表
- c# - 在 C# 中设置/匹配颜色
- javascript - 如何在角度 6、7、8、9 中启用猫头鹰轮播的上一个和下一个按钮
- jupyter-notebook - Sympy 属性错误:模块 'sympy' 没有属性 'derive_by_array'
- matplotlib - fill_between 没有填写正确的部分