楼主: gft198810
1956 8

[原创博文] 一个简单程序的具体解析---谁来帮我分析下 [推广有奖]

  • 0关注
  • 0粉丝

硕士生

30%

还不是VIP/贵宾

-

威望
0
论坛币
577 个
通用积分
5.1292
学术水平
1 点
热心指数
1 点
信用等级
1 点
经验
7848 点
帖子
74
精华
0
在线时间
213 小时
注册时间
2010-3-3
最后登录
2021-1-20

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
data summary;
input _type_ _freq_ cargosum;
cards;
0 72 10000
;
data empcount;
input  jobcode numemps;
cards;
[tr]  [td]BAGCLK[/td]  [td]140[/td] [/tr] [tr]  [td]BAGSUP[/td]  [td]18[/td] [/tr] [tr]  [td]CHKCLK[/td]  [td]125[/td] [/tr] [tr]  [td]CHKSUP[/td]  [td]18[/td] [/tr] [tr]  [td]FACCLK[/td]  [td]124[/td] [/tr] [tr]  [td]FACMGR[/td]  [td]17[/td] [/tr] [tr]  [td]FACMNT[/td]  [td]60[/td] [/tr] [tr]  [td]FINACT[/td]  [td]36[/td] [/tr] [tr]  [td]FINCLK[/td]  [td]53[/td] [/tr] [tr]  [td]FINMGR[/td]  [td]20[/td] [/tr] [tr]  [td]FLSCHD[/td]  [td]32[/td] [/tr] [tr]  [td]FLSMGR[/td]  [td]8[/td] [/tr] [tr]  [td]FLTAT1[/td]  [td]62[/td] [/tr] [tr]  [td]FLTAT2[/td]  [td]63[/td][/tr]
data percent;if _n_=1 then set summary(keep=cargosum);
set empcount;
pctemps=numemps/cargosum;
run;
问题:
1、此程序有几个数据指针
2、为什么cargosum的值能够保留
希望各位高手能够从PDV角度给予详细的解释,谢谢!
二维码

扫码加我 拉你入群

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

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

关键词:Summary percent FINACT Cargo Summa 程序

沙发
gft198810 发表于 2011-6-15 10:31:55 |只看作者 |坛友微信交流群
data empcount;
input  jobcode numemps;
cards;
BAGCLK        140
BAGSUP        18
CHKCLK        125
CHKSUP        18
FACCLK        124
FACMGR        17
;
run;
上边的程序没传完整,现补全

使用道具

藤椅
soporaeternus 发表于 2011-6-15 10:34:53 |只看作者 |坛友微信交流群
1 不懂什么叫数据指针
2 来自于数据集的变量,除非重写覆盖,否则PDV更新时不被修改
Let them be hard, but never unjust

使用道具

板凳
gft198810 发表于 2011-6-15 10:47:01 |只看作者 |坛友微信交流群
楼上的高手,谢谢你的回答!
那作用不就是跟retain变量的一样了吗?
不是返回data语句之后,初始化pdv中的变量为缺失值吗?

使用道具

报纸
gft198810 发表于 2011-6-15 10:47:29 |只看作者 |坛友微信交流群
楼上的高手,谢谢你的回答!
那作用不就是跟retain变量的一样了吗?
不是返回data语句之后,初始化pdv中的变量为缺失值吗?

使用道具

地板
gft198810 发表于 2011-6-15 10:54:48 |只看作者 |坛友微信交流群
谢谢soporaeternus ,貌似有点懂了

使用道具

7
soporaeternus 发表于 2011-6-15 11:08:38 |只看作者 |坛友微信交流群
From SAS Help

RETAIN Statement
......

Default DATA Step BehaviorWithout a RETAIN statement, SAS automatically sets variables that are assigned values by an INPUT or assignment statement to missing before each iteration of the DATA step.


......
Let them be hard, but never unjust

使用道具

8
wb8686 发表于 2011-6-15 13:38:46 |只看作者 |坛友微信交流群
两个set 的时候,有两个指针,分别指向两个set 的数据集,因为你用到了if_n_=1,也就是说,只在第一次循环(这里的循环,指运行完一个data过程,即运行完一个run;)的时候才set a ,也就说说第一个指针只指向a 的第一条记录,保持在那里不动了,即使a里面有好多观测,也只指向第一个观测
两个set 的用法很奇特,系统分配两个指针,指向两个数据集,set 出来的结果的长度,是最短的那个数据集的长度,即哪个指针最先遇到最后一个观测,就完成。set a ;set b;会用b里面的数据集更新a的数据集(如果变量名相同);一般情况下,两个set 的用法是 if _n_=1 then set a;这种情况下,a一般是一个观测,另一种用法是
if _n_=1 then do until(last); set a end=last;var+varr1; end; 这种情况下,a可以是多条观测,但是 do untile 的结果 还是只有一条(最后那一条);

使用道具

9
gft198810 发表于 2011-6-15 14:15:49 |只看作者 |坛友微信交流群
wb8686讲解的很详细,谢谢了

使用道具

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

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

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

GMT+8, 2024-5-4 02:35