全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
7627 5
2012-12-15
请各位高手帮我诊断一下我这个小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 可以实现我的目的。
谢谢各位


二维码

扫码加我 拉你入群

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

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

全部回复
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;
二维码

扫码加我 拉你入群

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

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

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;
二维码

扫码加我 拉你入群

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

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

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

谢谢
二维码

扫码加我 拉你入群

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

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

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=  ;
二维码

扫码加我 拉你入群

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

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

2012-12-16 08:59:49
shenroong 发表于 2012-12-15 23:45
您说的意思是在在生成数据之后
output out=    ;
是吗?
就是标红的部分代码。
二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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