SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 654|回复: 4
打印 上一主题 下一主题

请教2个问题-宏内有条件引用、ods输出如何去掉标题

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2009-10-21 04:50:56 | 只看该作者

请教2个问题-宏内有条件引用、ods输出如何去掉标题

各位好!请教两个问题:
在一个宏中如何标识一个块,可以多次引用,如:
%macro a(x=);
data _null_;
put 'aa';
run;
%if &x.=1 %then %goto c;
%if &x.=2 %then %goto d;
data _null_;
put 'bb';
run;
%c:
data _null_;
put 'cc';
run;
%d:
data _null_;
put 'dd';
run;
%mend a;

%a(x=1);则put 出了 aa cc  dd
%a(x=2);则put 出了 aa dd
想实现put出aa bb,即goto执行完回到原位继续执行,不知如何实现?如果使用%return则整个宏结束,也不行。。。也无法使用%include,因为要引用的部分本身含有宏参数,只有在执行宏时才读入

另一个问题:
使用ods,向excel中写东西时总是有个标题“SAS系统”,占用一行,如何能去掉呢?而使要写的东西从第一行开始?

诚心请教各位,谢谢!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2009-10-21 06:03:18 | 只看该作者

Re: 请教2个问题-宏内有条件引用、ods输出如何去掉标题

[code:2tx0p3xi]%macro a(x=);
%if &x.=1 %then %goto a; %if &x.=2 %then %goto a; %if &x.=3 %then %goto a;
%a: data _null_;put 'aa';run;
%if &x.=1 %then %goto c; %if &x.=2 %then %goto d;
%b: data _null_;put 'bb';run;
%if &x.=3 %then %goto f;
%c: data _null_;put 'cc';run;
%d: data _null_;put 'dd';run;
%f:
%mend a;
%a(x=3)[/code:2tx0p3xi]

这个程序听好玩的,蹦来蹦去的。随便说两句,我没有编程的基本功,但是总觉得可读性较差。因该有更好更正规的编法吧,不是冒犯
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2009-10-21 08:48:52 | 只看该作者

Re: 请教2个问题-宏内有条件引用、ods输出如何去掉标题

ODS输出的标题是由于使用的是HTML的格式。有两个办法:
1.是不用HTML输出,用msoffice2k ,用如下示例:
[code:effasl5n]ods msoffice2k file='test4.xls' ;
proc print data=test1 noobs ;
title;
run;
ods msoffice2k close ;[/code:effasl5n]
2.使用PROC TEMPLATE修改其输出格式,如下语句示例:
[code:effasl5n]Proc template;
Define tagset tagsets.newcsv;
  Parent = tagset.csv;
Define event table;
  Finish:
  Put NL;
End;
Define event row;
  Finish:
  Put NL;
End;
End;
Run;
ods tagsets.newcsv file="c:\paper2005\data\rxpk.csv";
prc print data=datadir.rxpk;
run;
ods tagsets.newcsv close;[/code:effasl5n]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2009-10-22 10:55:32 | 只看该作者

Re: 请教2个问题-宏内有条件引用、ods输出如何去掉标题

十分谢谢楼上两位的回复。第二个问题解决了。第一个问题,一楼的回复也解决了,可能我没说清楚我的意思,其实本意是在程序中实现对一些代码的有条件调用,用完之后再回来继续执行,关键是怎么再回来。因为对某段代码执行过程中可能会调用多次。而写成%if %then %do形式会重复好多次,所以想把这段东西放在固定的地方,可读性和修改都会好些。不知各位朋友有什么好的解决办法吗?再次感谢回帖的朋友。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2009-10-23 13:30:33 | 只看该作者

Re: 请教2个问题-宏内有条件引用、ods输出如何去掉标题

第一个问题可以嵌套宏试试
[code:2c2z2fek]/* outer_macro: A */
%macro a(x=);
        /* inner_macro: C */
        %macro c;
                data _null_;
                        put 'cc';
                run;
        %mend;
        /* inner_macro: D */
        %macro d;
                data _null_;
                        put 'dd';
                run;
        %mend;
        data _null_;
                put 'aa';
        run;
        %if &x=1 %then %c;
        %if &x=2 %then %d;
        data _null_;
                put 'bb';
        run;
%mend a;

%a(x=1)
%a(x=2)[/code:2c2z2fek]
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-6 02:50 , Processed in 0.067772 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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