全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1282 10
2020-02-27
请教大神们一个问题,是关于出现在“SAS Certification PrepGuide-Base Programming for SAS9”这本书第296页的这一段代码
“proc sort data=company.usaout=work.temp;  
   bydept;  
run;
data company.budget(keep=dept payroll);
  set work.temp;  
   bydept;
   ifwagecat='S' then Yearly=wagerate*12;  
  else if wagecat='H' then Yearly=wagerate*2000;
   iffirst.dept then Payroll=0;
  payroll+yearly;
   iflast.dept;
run; “

我的程度太浅了,所以问题比较多,如果你有任何想回答或评论的,无论长短,都请告诉我,谢谢~
1. 最开始的6行,引用了旧数据集company.budget,并创建了新数据集company.budget
“proc sort data=company.usaout=work.temp;  
by dept;
run;
data company.budget(keep=dept payroll);
set work.temp;  
by dept;“

为什么不像下面4行这样,而要引入“work.temp”作为过渡呢?
Data company.budget(keep=dept payroll);
set company.usa;
by dept;
run;
2. Yearly是新加入的变量吗?
3. payroll+yearly的值体现在哪里呢? 是指这两者的和作为一个新变量出现在表格中吗?
4.最后三行“if first.dept then Payroll=0; payroll+yearly; iflast.dept; “放在一起,起了怎样的作用,希望能帮我理解一下。
5.最后还有一个问题是关于后文提到的programdata vector (PDV), 原文如下“If you could look behind thescenes at the program data vector (PDV) as the Company.Budget data set is beingcreated, you would see the following. Notice the values for FIRST.Dept andLAST.Dept.”,我想问这里提到的program data vector (PDV)有什么意义,怎样调出这个界面呢?

我的程度太浅了,所以问题比较多,如果你有任何想回答或评论的,无论长短,都请告诉我,谢谢~
二维码

扫码加我 拉你入群

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

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

全部回复
2020-3-3 10:52:04
if first payroll+yearly显示在payroll列,这应该是求每个dept所有yearly相加的总和,if last 只输出最后总和那一行,work.temp就算一个过渡数据集,因为first.,last.需要对原数据集排列,原数据集是不能被修改的,所以tempt就用来过渡
二维码

扫码加我 拉你入群

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

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

2020-3-4 23:49:40
Jia1Zhao 发表于 2020-3-3 10:52
if first payroll+yearly显示在payroll列,这应该是求每个dept所有yearly相加的总和,if last 只输出最后总 ...
”first, last是对原数据集排列,所以为了不修改原数据集,需要引入一个tempt来过渡“,谢谢解释,这个点我之前不知道。
关于payroll那一部分的解释,我试着理解了一下,不知道是不是下面这个意思:
If first.dept then Payroll=0;
payroll+yearly;
这是起始sum statement的固定格式吗?指的是从0开始累加,把yearly的累加值写在payroll变量处?
二维码

扫码加我 拉你入群

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

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

2020-3-5 09:48:17
sophiecheese 发表于 2020-3-4 23:49
”first, last是对原数据集排列,所以为了不修改原数据集,需要引入一个tempt来过渡“,谢谢解释,这个点 ...
对的,按照dept 分组,从0加到这个dept最后一项的,然后只取最后的sum
二维码

扫码加我 拉你入群

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

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

2020-3-5 23:50:40
Jia1Zhao 发表于 2020-3-3 10:52
if first payroll+yearly显示在payroll列,这应该是求每个dept所有yearly相加的总和,if last 只输出最后总 ...
data name;
input name$;
cards;
BB
AA
;
run;

proc sort data=work.name=work.temp;
by  name;
run;
请问大神,为什么我这么尝试用work.temp过渡失败了呢?
二维码

扫码加我 拉你入群

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

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

2020-3-6 11:09:55
Cecilia_Xi 发表于 2020-3-5 23:50
data name;
input name$;
cards;
报啥错了我觉得应该是程序的问题吧
附件列表
aa.png

原图尺寸 2.29 KB

aa.png

二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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