楼主: shenroong
7230 5

sas macro call symput怎么用 [推广有奖]

  • 1关注
  • 0粉丝

高中生

22%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
150 点
帖子
17
精华
0
在线时间
16 小时
注册时间
2010-12-21
最后登录
2013-2-23

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
请各位高手帮我诊断一下我这个小macro哪里写错了
%MACRO CREATDATA;
%DO I=1 %TO 100;
DATA FILE&I;
DO ID=1 TO 5;
SCORE=CEIL(100*RANUNI(&I));
END;
RUN;
pROC MEANS data=FILE&I MEAN;
var score;
output out=MEAN&I mean=M&I;

RUN;
DATA ME&I;
SET MEAN&I;
CALL SYMPUT("M1",M&I);
RUN;
DATA F&I;
set FILE&I;
scorenew=score+&M1;
RUN;
%END;

%MEND;

%CREATDATA;
我想实现的目的是用算出100个data set的mean 然后用call symput 把每一个dataset 中算出的mean 记录成一个新的macro variable
然后用原data set里面的5个data和这个mean 相加生成新的dataset,
我最后在打印新的dataset 的时候,出来了这个东西
Obs ID SCORE scorenew
1    6     77      154

这个明显是错,请问怎么改下我的code 可以实现我的目的。
谢谢各位


二维码

扫码加我 拉你入群

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

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

关键词:symput Macro call acr put 记录

沙发
webgu 发表于 2012-12-15 13:26:42 |只看作者 |坛友微信交流群
这个需求好奇怪。%MACRO CREATDATA;
        %DO I=1 %TO 100;
                DATA FILE&I;
                        DO ID=1 TO 5;
                        SCORE=CEIL(100*RANUNI(&I));
                        output; /* 否则每个数据集只有1条观测,最终结果只是2倍而已*/
                        END;
                RUN;

                PROC MEANS data=FILE&I MEAN;
                var score;
                output out=MEAN&I mean=M&I;
                RUN;

                DATA _NULL_;
                        SET MEAN&I;
                        CALL SYMPUT("M&I",M&I);
                RUN;
     %END;

         %DO J=1 %TO 5;
                DATA F&J;
                        set FILE&J;
                        scorenew=score+&&M&j;
                RUN;
                PROC PRINT DATA=F&J;
                RUN;
         %END;

%MEND;

%CREATDATA;
SAS资源
1. SAS 微信:StatsThinking
2. SAS QQ群:348941365

使用道具

藤椅
bobguy 发表于 2012-12-15 23:10:02 |只看作者 |坛友微信交流群
There is nothing wrong seriously. But you need to add an output statement in the first data step.

%MACRO CREATDATA;
%DO I=1 %TO 2;
DATA FILE&I;
DO ID=1 TO 5;
SCORE=CEIL(100*RANUNI(&I));
output; ***add output here;
END;
RUN;
pROC MEANS data=FILE&I MEAN;
var score;
output out=MEAN&I mean=M&I;

RUN;
DATA _null_;
SET MEAN&I;
CALL SYMPUT("M1",M&I);
RUN;

DATA F&I;
set FILE&I;
mean=&M1; ***create a variable for ease debugging.
*scorenew=score+&M1;
scorenew=score+mean;
RUN;
%END;

%MEND;

%CREATDATA;

proc print;run;

使用道具

板凳
shenroong 发表于 2012-12-15 23:28:13 |只看作者 |坛友微信交流群
webgu 发表于 2012-12-15 13:26
这个需求好奇怪。
你的意思是说我在生成score 的时候没有记录,所以以后相加的时候也都是两倍是吗,那我应该怎么记录呢。
我按照你的code  run了一遍的时候,还是不成,最后生成的5个data set还是只有一个值并且还是2倍的关系

谢谢

使用道具

报纸
shenroong 发表于 2012-12-15 23:45:01 |只看作者 |坛友微信交流群
bobguy 发表于 2012-12-15 23:10
There is nothing wrong seriously. But you need to add an output statement in the first data step.

...
您说的意思是在在生成数据之后
output out=    ;
是吗?
还是说output score=  ;

使用道具

地板
webgu 发表于 2012-12-16 08:59:49 |只看作者 |坛友微信交流群
shenroong 发表于 2012-12-15 23:45
您说的意思是在在生成数据之后
output out=    ;
是吗?
就是标红的部分代码。
SAS资源
1. SAS 微信:StatsThinking
2. SAS QQ群:348941365

使用道具

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

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

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

GMT+8, 2024-4-28 08:06