Sas 在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

在Proc-SQL中,我希望使用宏变量
&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
has
to,from
tranwrd
has
from,to
。我相信我使用了正确的翻译,因为&condition4和5符合我的要求。只是数字(“1542”)不知怎么变成了(“6542”)。有什么想法吗?因为你用错了翻译<代码>翻译
将第一个列表中的任何字符转换为第二个列表中的相应字符
TRANWRD
需要所有字符,所有字符都按该顺序排列。所以
translate(var,'t6','t1')
将所有1转换为6s,将所有ts转换为ts。
transwrd(var,'t1','t6')
仅将所有
t1
转换为
t6