SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 551|回复: 5
打印 上一主题 下一主题

如何用macro来自动生成文件命

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2011-5-5 10:00:34 | 只看该作者

如何用macro来自动生成文件命

data a;
input sc $ pt map;
cards;
a 1 62
b 3 9
b 2 7
c 1 12
d 2 6
e 1 9
f 3 7
g 0 4
h 3 83
i 1 2
。。。
;
run;
我有个data如上所示,现在想得到n个data,把具有相同SC值的record存在一起,并起名:
a_a      (if sc='a'),
a_b      (if sc='b'),
a_c      (if sc='c'),
a_d      (if sc='d'),
...

谢谢!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2011-5-5 12:57:42 | 只看该作者

Re: 如何用macro来自动生成文件命

[code:21h1g9wf]data a;
    input sc $ pt map;
cards;
a 1 62
b 3 9
b 2 7
c 1 12
;
proc sql noprint;
    create table _temp as select distinct sc from a;
    select cats('ds_',sc) into :dslist separated by ' ' from _temp;
quit;
data _null_;
    set _temp end=last;
    if _n_=1 then call execute("data &dslist; set a;");
    call execute(cat('if sc=',quote(trim(sc)),' then output ds_',trim(sc),';'));
    if last then call execute('run; proc delete data=_temp; run;');
run;[/code:21h1g9wf]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2011-5-5 22:11:23 | 只看该作者

Re: 如何用macro来自动生成文件命

so great!!!
3x a lot.
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2011-5-6 11:07:19 | 只看该作者

Re: 如何用macro来自动生成文件命

我自己用MACRO写了一段程序,却无法运行,请高手指点一二。
谢谢!!!

data a;
input sc $ pt map;
cards;
a 1 62
b 3 9
b 2 7
c 1 12
;
run;
%macro na;
proc sql;
select count(*) into :n from a;
select sc into :va separated by ' ' from a;
quit;
%do i=1 %to &n.;
proc sql;
create table a_&va. as
select * from a
where sc=%scan(&va.,&i.);
quit;
%end;
%mend;
%na
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2011-5-6 11:09:32 | 只看该作者

Re: 如何用macro来自动生成文件命

上面有个笔误,以下面的为准。
谢谢!!!


data a;
input sc $ pt map;
cards;
a 1 62
b 3 9
c 2 7
d 1 12
;
run;
%macro na;
proc sql;
select count(*) into :n from a;
select sc into :va separated by ' ' from a;
quit;
%do i=1 %to &n.;
proc sql;
create table a_&va. as
select * from a
where sc=%scan(&va.,&i.);
quit;
%end;
%mend;
%na
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
6#
 楼主| 发表于 2011-5-14 13:21:27 | 只看该作者

Re: 如何用macro来自动生成文件命

你把va %put,看看输出,就应该会发现一个问题的
其实程序报错就能发现问题所在
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2025-6-10 13:26 , Processed in 0.068038 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表