宏lvariable ist由逗号分隔的字符

时间:2015-08-24 13:54:03

标签: sas

我有一个关于将字符串列表作为宏变量传递给sas的问题。

我想查看由commma分隔的字符列表:

阿富汗,安哥拉,布基纳法索,阿塞拜疆

我想在SAS的日志文件中逐个打印这个国家:

阿富汗 安哥拉 布基纳法索 Azerbijan

这是我的sas代码(我尝试了两个东西,一个用%str(,)作为%qscan函数中的第三个参数,另一个是省略第三个参数):

我尝试过的第一件事:

%macro c2(countrylist);
        %let c = 0;
        %do %while(%qscan(&countrylist,&c+1, %str(,)) ne %str());
            %let c = %eval(&c+1); 
            %let countryname = %scan(&countrylist, &c);
            %put &countryname &c;
            %end;
%mend;

但不知怎的,我的代码不起作用,它不是将逗号视为唯一的分隔符,它将EITHER逗号或空格视为分隔符。所以我得到这样的东西,并且Azerbijan(角色列表中的最后一个)没有被打印(由于某些原因,Azerbijan似乎没有被打包)

阿富汗 安哥拉 布基纳法索 索

我已经使用了引用功能:%str(,)
在我的宏中,但不知何故仍然无法正常工作。

我尝试了第二件事:

如果我将%str(,)作为qscan中的第三个参数,那么我得到:

阿富汗 安哥拉 布基纳法索 布基纳法索 阿塞拜疆

所以Burkina和Faso被视为独立的实体(但Burkina和Faso应该一起印刷)。

这是我向SAS提交的内容:

%let pay = %str(Afghanistan,Angola,Burkina Faso,Azerbaijan);
%c2(&pay);

如果有人知道我的问题在哪里,那就太好了。

1 个答案:

答案 0 :(得分:1)

您没有在%SCAN()函数调用中设置分隔符。您在%DO循环的%WHILE()条件测试中使用的%QSCAN()调用中执行了此操作,但未在实际提取国家/地区名称的行中执行。

%macro c2(countrylist);
%local c countryname ;
%do c=1 %to %sysfunc(countw(&countrylist,%str(,)));
  %let countryname = %scan(&countrylist, &c, %str(,));
  %put &countryname &c;
%end;
%mend;