k*****u 发帖数: 1688 | 1 下面这组data,打算对列求和。 用data step可以如下做,现在打算把
sum1+summer1;
sum2+summer2;
sum3+summer3;
sum4+summer4;
换成用macro来改写,应该怎么写? 折腾了好久都没弄出来,求教。
我试着用array可以做,macro总是说有问题。谁能帮我写一下code? 谢谢
data wide;
input name $ summer1-summer4;
cards;
a 1 2 3 4
b 1 2 3 4
c 1 2 3 4
;
data sum_data;
set wide end=lastobs;
sum1+summer1;
sum2+summer2;
sum3+summer3;
sum4+summer4;
keep sum1-sum4;
if lastobs then output;
run;
proc print data=sum_data;
run; |
s******r 发帖数: 1524 | 2 %macro Test(Countt);
data sum_data;
set wide end=lastobs;
%do i =1 %to &Countt;
sum&i+summer&i;
%end;
keep sum1-sum&Countt;
if lastobs then output;
run;
%mend;
%Test(4);
错了不管。
【在 k*****u 的大作中提到】 : 下面这组data,打算对列求和。 用data step可以如下做,现在打算把 : sum1+summer1; : sum2+summer2; : sum3+summer3; : sum4+summer4; : 换成用macro来改写,应该怎么写? 折腾了好久都没弄出来,求教。 : 我试着用array可以做,macro总是说有问题。谁能帮我写一下code? 谢谢 : data wide; : input name $ summer1-summer4; : cards;
|
k*****u 发帖数: 1688 | 3 确实是对的
能不能再帮我看看,我这么写为什么不对
%macro sumv(maxobs=);
%do i=1 %to &maxbos;
asum&i+summer&i
%if &i ne &maxobs %then ;
;
%end;
%mend;
data sum_data;
set wide end=lastobs;
%sumv(maxobs=4);
keep sum1-sum4;
if lastobs then output;
run; |
a*****3 发帖数: 601 | 4 话说没人喜欢看别人code where there are even typos not cleared (maxbos?). The
%if %then is also used in a weird fashion. Your code worked okay after i
deleting everything i did not understan:
%macro sumv(maxobs=);
%do i=1 %to &maxobs;
sum&i+summer&i ;
%end;
%mend sumv;
option mlogic mprint symbolGEN;
data sum_data;
set wide end=lastobs;
%sumv(maxobs=4) ;
keep sum1-sum4;
if lastobs then output;
run;
杀牛给点伪币吧 马上到年关了 |
k*****u 发帖数: 1688 | |
a*****3 发帖数: 601 | |