我正在寻找一种方法来创建包含数据集的某些值的字符串变量,同时通过数据步骤。SAS变量级联通过数据步骤
实施例的数据集work.test:
AddToStringYN Value
Y One
Y Two
N Three
Y Four
N Five
所以在结束时,变量将如下所示:OneTwoFour(或甚至更好FourTwoOne)。 这看起来很简单,但我似乎无法找到办法。 我也试图与宏观变量工作是这样的:
%let stringvar=;
Data _null_;
set work.test;
if AddToStringYN = "Y" then do;
call symput('stringvar',"&stringvar" || strip(value));
end;
Run;
但是这给:
GLOBAL STRINGVAR Four
所以我只得到了最后一个值。我明白这一定是因为我对这个宏观设施的误解,但我不明白为什么只有变量的最后一个值。 我以为只是最后一次symput被称为是实际执行或东西,但后来当我的代码调整为:
%let stringvar=;
Data _null_;
set work.test;
if AddToStringYN = "Y" then do;
call symput('stringvar'||strip(value),"&stringvar" || strip(value));
end;
Run;
那我让他们都:
GLOBAL STRINGVARONE One
GLOBAL STRINGVARTWO Two
GLOBAL STRINGVARFOUR Four
所以我最后的猜测是,通过数据步骤,'调用symput ...'行实际上被添加到宏处理器,其中“& stringvar”已被替换,并且仅在最终语句被全部执行之后。
这是一个很好的假设还是存在另一种解释? 回到原来的问题:是否有一个简单的方法来实现这一点(具有所需的变量)?
完善!我记得尝试使用这样的结构(保留和可变重用的组合),但它不起作用。现在还找不到什么不同,但它工作!确实很简单......如果你知道在哪里看;) 谢谢! (关于附加问题的任何想法,如果我的逻辑是正确的宏变量?) – Yoh 2011-04-29 11:07:10
另外,尝试用cat(),catt(),cats(),catx()函数替换trim(left() 。它们非常灵活,更易于使用,并为您自动进行类型转换!可用SAS9以上... – 2011-04-29 19:40:29
@Rob将调查,使用剥离()现在... – Yoh 2011-05-02 12:43:48