全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
7295 9
2013-05-31
小弟是一个sas新手, 遇到以上问题, 希望高手给与帮助解答!谢谢各位的时候了。

data pay;

  input area amount;

cards;

111 100

111 25

333 160

333 80

777 142.66

;

proc sort data=pay;

  by area;

data subtotal;

  set pay;

  by area;

  if first.area then total=0;

  total+amount;

  drop amount;

  if last.area then output;

run;

proc print;

run;


QQ截图20130531103626.png

请问红色部分运行的逻辑是什么? 哪儿几行的code使111/333的amount相加? 777只有一个记录,如何越过之前相加的步骤?

total=0的作用是什么? total+amount;drop amount;的解释是什么?


谢谢高手的解答!



二维码

扫码加我 拉你入群

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

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

全部回复
2013-5-31 23:05:28
是不是这样:
1、这段程序想算每个地区(area)工资之和。
2、first.area表示按area排序之后的第一个观测,将total赋为0。
3、然后total+amount,先读第一条记录,用0+100,得到100;再读下一条,100+25得到125,这个就是111 area的工资总数。这样每个地区的工资总合就被积累在area对应的最后一行记录后面的total这一变量中。即111 area最后一条记录应该是111 25 125。想知道每个地区的总工资,把amount扔掉就可以了。
4、最后last.area表示按area排序之后的最后一个观测输出,就可以看到每个地区的总工资了。
二维码

扫码加我 拉你入群

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

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

2013-6-1 02:21:33
不好意思,我还是有些问题不是很明白
1) 如何通过total+amount这个式子等到total 125。 我不是很明白程序的运行, 可不可以从累加语句的角度给我讲解一下?
2) if last.area then output;:这对这个语句,如何判断142.66最后赋值给total, 而不是amount?

我知道可能我的问题有时候比较幼稚, 新手, 请谅解!
二维码

扫码加我 拉你入群

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

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

2013-6-1 16:32:06
grace_424 发表于 2013-6-1 02:21
不好意思,我还是有些问题不是很明白
1) 如何通过total+amount这个式子等到total 125。 我不是很明白程序 ...
1)total + amount实际是一个累加语句,total是一个累加变量,amount是在total变量的基础上累加,每次total+amount后的值都是作为total变量的值,这个语句中的total变量是自动retain的,即每次循环后不会自动清空

2)142.66
二维码

扫码加我 拉你入群

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

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

2013-6-1 16:36:27
Eternal0601 发表于 2013-6-1 16:32
1)total + amount实际是一个累加语句,total是一个累加变量,amount是在total变量的基础上累加,每次tot ...
2)142.66这条记录对应的area只有一条,所以sort之后,first.area和last.area都为1,前面有if first.area将total初始化为0,紧接着有累加,total的值就变为142.66,后面的last.area if条件为真,相应的记录也就输出来了
二维码

扫码加我 拉你入群

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

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

2013-6-3 00:41:08
Eternal0601 发表于 2013-6-1 16:36
2)142.66这条记录对应的area只有一条,所以sort之后,first.area和last.area都为1,前面有if first.area将 ...
不好意思,还得麻烦你!
1)  first.area/last.area指的是包含所有area(111/333/777)的记录?还是只指定area下的first.area/last.area(比如在area111下的first.area/last.area)?
2)对于142.66这条记录,为什么您说‘前面有if first.area将total初始化为0,紧接着有累加,total的值就变为142.66’?
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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