gpt4 book ai didi

sas - 如何防止 CATx 函数计算表达式

转载 作者:行者123 更新时间:2023-12-04 14:26:08 24 4
gpt4 key购买 nike

使用 %sysfunc 调用 CATT() 函数时,有没有办法阻止它评估表达式?

例如给出代码:

%let date=10-13-2015;
%put %sysfunc(catt(The date Is:,&date));

我希望它返回:
The date Is:10-13-2015

因为 10-13-2015 只是一个文本字符串。但是 CATT() 将连字符视为减号并将其计算为数字表达式,返回:
The date Is:-2018

我试过宏引用,但没有改变任何东西,我想是因为我需要以某种方式隐藏 CATT() 中的值。似乎如果 CATT 的任何参数看起来像一个表达式,它将被视为表达式。

另一个例子:
%let value=2 and 3;
%put %sysfunc(catt(The value Is:,&value));
The value Is:1

最佳答案

如果您可以这样做,只需删除逗号 - 无需将其分隔为单个参数(除非您使用 catx() 而不是 catt() :

%let date=10-13-2015;
%put %sysfunc(catt(The date Is: &date));

就个人而言,我认为最好的工作方式是将日期存储为 SAS 日期值,然后使用 %sysfunc 的第二个(可选)参数。应用格式。这提供了更好的灵活性。
%let date = %sysfunc(mdy(10,13,2015));
%put The date Is: %sysfunc(sum(&date),mmddyyd10.);

如果您坚持使用原始方法并且正在使用 catx() ,然后我不知道该怎么做。我能得到的最接近的是插入一段文本,这样它就不能被解释为表达式,然后使用 tranwrd 删除该文本。 .漂亮,丑陋,它留下了一个空间:
%let date=10-13-2015;
%let tmp=%sysfunc(catx(#, The date Is: , UNIQUE_STRING_TO_REMOVE&date ));
%let want=%sysfunc(tranwrd(&tmp, UNIQUE_STRING_TO_REMOVE, ));

%put &want;

给出:
The date Is:# 10-13-2015

我还尝试了宏引用的每种组合,并扫描了整个 SAS 函数列表,但看不到任何其他可行的选项。

关于sas - 如何防止 CATx 函数计算表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33109935/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com