全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
7815 2
2019-01-21
data by;
  input state $ city $ month x;
cards;
nc a 1 3.02
nc a 2 2.1
nc a 3 4.03
nc b 1 5.03
nc b 2 6.3
nc b 3 7.3
va c 1 8.1
va c 2 8.2
va c 3 9.3
va d 1 10.8
va d 2 11.1
va d 3 31.2
;
run;

data by5;
  set by;
  by  state  city month;
  file print;
  if x=8.2 then put _all_;
run;
为什么把by语句改为  by month state  city ;后程序只读了前两行,是不是意味着by语的变量顺序需要根据输入变量的顺序?
另外还有没有类似的语句需要注意变量顺序?

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2019-1-25 03:36:40
by statement后面是有顺序的,by state city month;相当于先按照state的alphabetical顺序排序分组,然后在每一个state组内,再对city进行排序分组,接着在city组内对month进行排序分组。假如你把month提前,变成by month state city,那么按照SAS对于by month的理解,下一个obs的month值应该大于等于上一个obs的month值。所以,第一条输出没有问题,第二条输出也没有问题,第三条读入后,在与第四条的month进行比对的时候,发现第四条的month值为1,小于第三条month的值,因此,第三、第四两条都不会输出到by5数据集中,然后log日志报错,说by variable没有被正确的sort。

不管是set by,还是merge by,只要这些有by的,提前都要进行sort by,并且sort by的variable与后续的set by、merge by的variables要相同,顺序也要严格一致。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2019-2-21 18:54:27
steven_1017 发表于 2019-1-25 03:36
by statement后面是有顺序的,by state city month;相当于先按照state的alphabetical顺序排序分组,然后在每 ...
谢谢您的回复,我懂了
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群