SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 1573|回复: 2
打印 上一主题 下一主题

宏变量的赋值匹配问题

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2003-10-20 17:40:28 | 只看该作者

宏变量的赋值匹配问题

data sam1;
a=1;
run;
data sam2;
b=2;
run;
data sam3;
c=3;
run;
proc sql noprint;
select memname into :tblname separated by '.' from sashelp.vstable
where libname='WORK';
select count(*) into:n from sashelp.vstable
where libname='WORK';
quit;

%macro mac;
%do i=1 %to &n;
        %let name1=%scan(&tblname,&i,'.');
        %let name2=%substr(&name1,1,3);
   %if %trim(&name2)='SAM' %then %put &name1;
%end;
%mend;

%mac;

主要是mac中的%if那行,
也可以使用 %if %trim(%left(&name2))='SAM' ......
不知哪里错了?
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2003-10-20 17:57:11 | 只看该作者

Re: 哪里有问题?

[quote="willon":ed9c3]..
主要是mac中的%if那行,
也可以使用 %if %trim(%left(&name2))='SAM' ......
不知哪里错了?[/quote:ed9c3]

将这句改成:
%if %trim(&name2)=SAM %then %put &name1;
或者
%if “%trim(&name2)”=“SAM” %then %put &name1; /*这个方法更为可靠,有一篇文章专门讲解这个问题,下次贴上*/

因为宏变量的值没有引号。

另外宏变量一般不需要用%trim(%left,因为后面没有填补的空格。

<宏变量的值均为字符型,所以从SAS系统的设置角度来看,不需要加引号>
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2003-10-20 18:12:15 | 只看该作者
谢谢,要的就是这个。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-5 18:29 , Processed in 0.104676 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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