Sas 在proc sql中替换宏变量的字符串
在Proc-SQL中,我希望使用宏变量Sas 在proc sql中替换宏变量的字符串,sas,sas-macro,proc-sql,Sas,Sas Macro,Proc Sql,在Proc-SQL中,我希望使用宏变量&condition3,但我希望将宏变量中的字符串“t1”替换为“t6”。如何使以下公式起作用:translate(&condition3,'T6','T1') 顺便说一下,&condition3解析为:和t1.storein('1234') 完整查询: Proc sql; Create table xxx as Select.... From ... Where condition1 And condit
&condition3
,但我希望将宏变量中的字符串“t1”替换为“t6”。如何使以下公式起作用:translate(&condition3,'T6','T1')
顺便说一下,&condition3
解析为:和t1.storein('1234')
完整查询:
Proc sql;
Create table xxx as
Select....
From ...
Where condition1
And condition 2
&condition3
您需要使用
%SYSFUNC
宏语句
%sysfunc(tranwrd(&condition3,t1,t6))
您可以直接使用它,即不将其分配给另一个宏变量。事实上,您在procsql中使用它并不重要,因为您只是创建要传递给(任何对象)的文本
这样说,你可能想考虑使用宏代替宏变量。如果是这样的话,这将更符合逻辑
%macro condition3(table=);
and &table..store in ('1234')
%mend condition3;
然后可以像宏变量一样在SQL中使用宏
where condition1
and condition2
%condition3(table=t6)
乔,非常感谢你的及时回复!在日志中:&条件3解析为:和T1.STR_SITE_NUM in(“1542”),但在%sysfunc中它解析为:和T6.STR_SITE_NUM in(“6542”),您知道1542解析为6542的原因吗?它不会像那样直接工作,我必须将%sysfunc(translate(&condition3,t6,t1))放在condition2之后的宏中。再次感谢!稍后我将尝试您的宏示例。因为“translate”不正确。。。将更新答案。将来,如果您的评论是针对答案的,请对答案进行评论。@Joe我想在那里尝试您的宏示例,但如何转换我的宏变量?我最初是从互联网上获得下面的代码的Str'是用户提示输入
%global STR\u COUNT STR;%设STR_WHERE_子句=;数据为空/*数据条款;*/如果缺少(symget('str'))=0,则执行该操作;长度为1000美元;STR1=symget('STR');STR2=输入(STR1,best4.,z4.);STR_LIST=quote(STR2);放置stru列表;结束;如果缺少(STR_列表)=0,则调用symputx('STR_WHERE_子句',cats('and T1.STR_SITE_NUM in(',STR_列表'));运行;%PUT&STR_Where_子句@Joe我在下面的链接中打开了另一个问题线索。谢谢更新。请注意参数的颠倒:Translate
hasto,from
和tranwrd
hasfrom,to
。我相信我使用了正确的翻译,因为&condition4和5符合我的要求。只是数字(“1542”)不知怎么变成了(“6542”)。有什么想法吗?因为你用错了翻译<代码>翻译
将第一个列表中的任何字符转换为第二个列表中的相应字符TRANWRD
需要所有字符,所有字符都按该顺序排列。所以translate(var,'t6','t1')
将所有1转换为6s,将所有ts转换为ts。transwrd(var,'t1','t6')
仅将所有t1
转换为t6
。