楼主: sophiecheese
955 10

[实际应用] 请教大神们一个问题 [推广有奖]

  • 1关注
  • 0粉丝

初中生

33%

还不是VIP/贵宾

-

威望
0
论坛币
15 个
通用积分
2.0001
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
112 点
帖子
6
精华
0
在线时间
19 小时
注册时间
2020-2-9
最后登录
2021-2-27

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
请教大神们一个问题,是关于出现在“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)有什么意义,怎样调出这个界面呢?

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

扫码加我 拉你入群

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

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


沙发
Jia1Zhao 发表于 2020-3-3 10:52:04 |只看作者 |坛友微信交流群
if first payroll+yearly显示在payroll列,这应该是求每个dept所有yearly相加的总和,if last 只输出最后总和那一行,work.temp就算一个过渡数据集,因为first.,last.需要对原数据集排列,原数据集是不能被修改的,所以tempt就用来过渡
已有 2 人评分经验 学术水平 热心指数 信用等级 收起 理由
eijuhz + 40 + 1 精彩帖子
sophiecheese + 1 + 1 + 1 热心帮助其他会员

总评分: 经验 + 40  学术水平 + 1  热心指数 + 2  信用等级 + 1   查看全部评分

使用道具

藤椅
sophiecheese 发表于 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变量处?

使用道具

板凳
Jia1Zhao 发表于 2020-3-5 09:48:17 |只看作者 |坛友微信交流群
sophiecheese 发表于 2020-3-4 23:49
”first, last是对原数据集排列,所以为了不修改原数据集,需要引入一个tempt来过渡“,谢谢解释,这个点 ...
对的,按照dept 分组,从0加到这个dept最后一项的,然后只取最后的sum
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
sophiecheese + 1 + 1 + 1 热心帮助其他会员

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

使用道具

报纸
Cecilia_Xi 在职认证  发表于 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过渡失败了呢?

使用道具

地板
Jia1Zhao 发表于 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

已有 2 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
eijuhz + 40 + 2 精彩帖子
Cecilia_Xi + 1 + 1 + 1 + 1 精彩帖子

总评分: 经验 + 40  论坛币 + 1  学术水平 + 1  热心指数 + 3  信用等级 + 1   查看全部评分

使用道具

7
Jia1Zhao 发表于 2020-3-6 11:17:09 |只看作者 |坛友微信交流群
Cecilia_Xi 发表于 2020-3-5 23:50
data name;
input name$;
cards;
能康康报啥错了吗

使用道具

8
sophiecheese 发表于 2020-3-7 12:28:43 |只看作者 |坛友微信交流群
Cecilia_Xi 发表于 2020-3-5 23:50
data name;
input name$;
cards;
是不是掉了一个"out"呢。
proc sort data=work.name   out=work.temp;
这样是不是就可以了?

使用道具

9
Cecilia_Xi 在职认证  发表于 2020-3-7 14:48:28 |只看作者 |坛友微信交流群
Jia1Zhao 发表于 2020-3-6 11:09
报啥错了我觉得应该是程序的问题吧
感谢,是的,少了一个out=

使用道具

10
Cecilia_Xi 在职认证  发表于 2020-3-7 14:48:48 |只看作者 |坛友微信交流群
sophiecheese 发表于 2020-3-7 12:28
是不是掉了一个"out"呢。
proc sort data=work.name   out=work.temp;
这样是不是就可以了?
是的,谢谢

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-23 19:43