全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
3537 4
2015-08-06
     各位大侠,这是我写的一个产生数据集Txy的程序。由于需要产生的数据集太过繁多,小弟想通过do循环来实现宏程序的重复合并,可是似乎无法奏效,求教各位。

宏:
%macro des(x,y,z);
data k;
  set a;
  if group_1=&x and group_2=&y then output;
run;

proc sort data=k;by order_2;run;
proc means data=k noprint;
  var &z;
  by order_2;
  output out=b n= mean= std= min= median= max=/autoname;
run;

data b(keep=order_2 n mean sd minimum median maximum);
  set b;
  n=put(%upcase(&z)_N,3.);
  Mean=put(%upcase(&z)_Mean,6.2);
  SD=put(%upcase(&z)_StdDev,7.3);
  Minimum=put(%upcase(&z)_Min,5.1);
  Median=put(%upcase(&z)_Median,6.2);
  Maximum=put(%upcase(&z)_Max,5.1);
run;

proc transpose data=b out=c;
  id order_2;
  var n mean sd minimum median maximum;
run;

data t&x.&y.(keep=name per1 per2 per3 per4 group_1 group_2);
  set c;
  per1=_1;
  per2=_2;
  per3=_3;
  per4=_4;
  group_1=&x;
  group_2=&y;
rename _name_=name;
run;   
%mend des;



循环程序:
data s;
  %do i=1 %to 10;
    %do j=1 %to 4;
         set s %des(&i,&j,aval);
         output;
    %end;
  %end;
run;

二维码

扫码加我 拉你入群

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

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

全部回复
2015-8-8 00:17:58
%do要写在macro里面
二维码

扫码加我 拉你入群

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

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

2015-8-9 15:34:18
%macro des(x,y,z);
%do i=1 %to &x;
        %do j=1 %to &y;

data k;
  set a;
  if group_1=&x and group_2=&y then output;
run;

proc sort data=k;by order_2;run;
proc means data=k noprint;
  var &z;
  by order_2;
  output out=b n= mean= std= min= median= max=/autoname;
run;

data b(keep=order_2 n mean sd minimum median maximum);
  set b;
  n=put(%upcase(&z)_N,3.);
  Mean=put(%upcase(&z)_Mean,6.2);
  SD=put(%upcase(&z)_StdDev,7.3);
  Minimum=put(%upcase(&z)_Min,5.1);
  Median=put(%upcase(&z)_Median,6.2);
  Maximum=put(%upcase(&z)_Max,5.1);
run;

proc transpose data=b out=c;
  id order_2;
  var n mean sd minimum median maximum;
run;

data t&x.&y.(keep=name per1 per2 per3 per4 group_1 group_2);
  set c;
  per1=_1;
  per2=_2;
  per3=_3;
  per4=_4;
  group_1=&x;
  group_2=&y;
rename _name_=name;
run;   

        %end;
%end;

data s;
    set %if %sysfunc(exist(s,DATA)) %then s; t&x.&y.(in=a);;
run;

%mend des;
%des(10,4,aval);
二维码

扫码加我 拉你入群

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

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

2015-8-10 09:02:44
孤单的我们 发表于 2015-8-9 15:34
%macro des(x,y,z);
%do i=1 %to &x;
        %do j=1 %to &y;
谢谢大侠,我明白您的思路了,刚开始并未想到宏语句里可以直接运行DO循环语句
二维码

扫码加我 拉你入群

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

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

2015-8-10 09:03:48
teqel 发表于 2015-8-8 00:17
%do要写在macro里面
谢谢,结合孤单的宏明白了
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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