楼主: wodewin
3235 4

[原创博文] 求助:如何利用宏来批量产生/合并数据集? [推广有奖]

  • 2关注
  • 0粉丝

硕士生

52%

还不是VIP/贵宾

-

威望
0
论坛币
2585 个
通用积分
2.4600
学术水平
11 点
热心指数
10 点
信用等级
12 点
经验
772 点
帖子
35
精华
0
在线时间
291 小时
注册时间
2015-7-23
最后登录
2024-1-9

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
     各位大侠,这是我写的一个产生数据集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;

二维码

扫码加我 拉你入群

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

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

关键词:合并数据 数据集 Transpose minimum Maximum 如何

沙发
teqel 发表于 2015-8-8 00:17:58 |只看作者 |坛友微信交流群
%do要写在macro里面

使用道具

%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);
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
wodewin + 1 + 1 + 1 精彩帖子

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

使用道具

板凳
wodewin 发表于 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循环语句

使用道具

报纸
wodewin 发表于 2015-8-10 09:03:48 |只看作者 |坛友微信交流群
teqel 发表于 2015-8-8 00:17
%do要写在macro里面
谢谢,结合孤单的宏明白了

使用道具

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

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

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

GMT+8, 2024-4-28 04:17