作者hanjing (自知者明)
站内Statistics
标题[程式] 请问我的SAS回圈是否有写错
时间Mon Apr 26 17:19:16 2010
[软体程式类别]:
SAS
[程式问题]:
叙述统计
[软体熟悉度]:
低(1~3个月)
[问题叙述]:
我想要写proc means的回圈
但因为对回圈不熟悉,而书上对於回圈的示范多是在资料处理的部份
所以我就依样画葫芦把他用在proc means里面
我要对emp这个变数进行proc means并求取该变数的sum值
由於分类变类太多了(240个分类),而且每一个分类变数之间并没有关系
所以我要以更换分类变数的方法,重复计算每次的sum值
举例(re1到 re240即不同的分类变数)
ID emp re1 re2 re3 ... ... re240
A 25 1 0 1 0
B 10 1 1 1 0
C 15 0 0 1 0
如果以re1做为分类变数 emp的sum值就是
re1=0 sum=15
re1=1 sum=25+10
若以re2做为分类变数 emp的sum值就是
re2=0 sum=25+15
re2=1 sum=10
以此类推
[程式范例]:
原来的作法是
proc means data=c maxdec=2 n mean sum;
var emp;
class re1 ;
by two_digit;
output out=C_re1 N=N mean=mean sum=sum ;
TITLE ’C_re1’;
;
run;
然後每次手动更换re1到re240...
於是我想说这样用
%macro rep(i);
proc means data=c maxdec=2 n mean sum;
var emp;
class re&i ;
output out=C_re&i N=N mean=mean sum=sum ;
TITLE ’C_re&i’;
%mend rep;
%rep(1);
%rep(2);
%rep(3);
我觉得应该没有错
但是sas跑出
WARNING: Apparent symbolic reference I’ not resolved.
而且左边的content's work
忽然出现了一个资料夹叫做sasmacr
想请问出了什麽问题
然後程式码要怎麽修
感谢帮忙
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.138.153.11
※ 编辑: hanjing 来自: 140.138.153.11 (04/26 17:20)
1F:→ ASD332:title 中改用双引号? " " 04/26 17:52
2F:→ hanjing:好像没什麽差 04/26 18:04
3F:→ ASD332:改成这样试看看 Title "C_re&i" ; 04/26 18:23
4F:→ hanjing:嗯,改用双引号之後,WARNING: Apparent symbolic reference 04/26 18:31
5F:→ hanjing:这行消失了,但是左边的栏位还是有sasmacr这个资料夹,而且 04/26 18:32
6F:→ hanjing:要删除资料夹时会出现..ERROR:you cannot delete 04/26 18:40
7F:→ hanjing:work.sasmacr.catalog because work.sasmacr.catalog 04/26 18:41
8F:→ hanjing:is in use by you in resource environment dms process 04/26 18:41
9F:→ ASD332:那应该是你自订 macro 後产生出来的 不用理它 04/26 18:55
10F:→ ASD332:离开 sas 後会自动消失 04/26 18:55
11F:→ hanjing:另外还有一个问题就是,最後一个产生的C_re&i会无法开启 04/26 18:56
12F:→ hanjing:例如 %rep(3);是最後一个的话,C_re3会无法开启,我的想法是 04/26 18:58
13F:→ hanjing:那就多用一个,像我最多有240个,所以就让他到241这样 04/26 18:59
14F:推 tew:因为你写了 Macro 他会出来 sasMacr 这样的东西 储存你的巨 04/26 19:18
15F:→ hanjing:嗯,了解,所以我这样用macro真的没有错吗?可是为什麽还是会 04/26 20:09
16F:→ hanjing:有最後一个%rep()的结果开不起来 04/26 20:10
17F:→ ASD332:你这样的写法并无牵涉到 do-loop,所以不会产生你提到的241 04/26 21:46
18F:→ ASD332:确认一下变项或档案是否存在吧 04/26 21:47
19F:→ hanjing:我确定变项是在的,如果假设%rep(4)是最後一个rep,只要开启 04/27 09:42
我确定re4这个变项的确存在
但如果%rep(4)是最後一个rep的话,在proc means的程序跑完後
所产生的C_re4就会无法开启,也无法删除
这是对话框的画面,可以帮我解答一下是不是程式写的地方有问题
http://www.ppbox.com.tw/img/1272332202x-1937073909.jpg
※ 编辑: hanjing 来自: 140.138.153.11 (04/27 09:46)
20F:→ ASD332:macro 里的 proc means 最後加个 run ; 04/27 14:36
21F:→ hanjing:嗯,还是一样,会删不掉 04/27 16:58
22F:→ ASD332:重新启动 sas 再跑一次看看... 04/27 17:23
23F:→ kingbee:最後一行改用quit; 做结尾 04/28 17:10
24F:→ hanjing:嗯~QUIT; 可以 感 谢帮忙 04/30 15:07
25F:→ hanjing:嗯proc means的时候加quit可以,但到了data指令时用quit会 04/30 15:18
26F:→ hanjing:出现ERROR 180-322: Statement is not valid or it is use 04/30 15:18
27F:→ hanjing:out of proper order. 04/30 15:18
28F:→ hanjing:虽然不知道为什麽,但在DATA指令下将quit改run就ok了 感谢 04/30 15:20