单词/ var在列表SAS中的位置

时间:2014-05-08 09:38:34

标签: sas sas-macro

这可能是一个相当简单的问题,但我是SAS新手,即使在谷歌研究过这个问题之后我也很无能为力。

我有一个宏变量 -

%let list = 12AUG2013 13AUG2013 15AUG2013 16AUG2014 09SEPT2014;

我需要做以下事情 -

a)列表中的总字数:在R中,这将是长度(列表)。但在SAS中,长度计算每个角色。 COUNTW不起作用。无论如何我可以这样做吗?

b)找到第i个字:如果我需要此列表中的第3个元素,我会在R中列出[3]。我怎么能在SAS中这样做?

c)找到元素的位置:假设我需要知道16AUG2014在列表变量中的位置,我该如何获得它?

感谢您的帮助!

2 个答案:

答案 0 :(得分:6)

当您询问宏变量时,它与使用SAS数据步骤功能略有不同。您的问题提供了一个有用的示例,说明它们的区别一些数据步骤函数具有等效的宏函数%SCAN%SUBSTR等。其他函数需要使用%SYSFUNC,这允许将大多数SAS datastep函数转换为宏函数。

所以,参考你的例子:

%let list = 12AUG2013 13AUG2013 15AUG2013 16AUG2014 09SEPT2014;

%let list_numwords = %sysfunc(countw(&list)); /* This example shows the use of SYSFUNC */
%let list_word3 = %scan(&list,3); /* These examples show the use of SCAN and INDEX, inbuilt macro functions*/
%let list_pos16AUG2014 = %index(&list,16AUG2014);

代码创建新的宏变量,分别存储问题a,b和c *的答案。

*如果您需要16AUG2014的字数(即4),那么这有点困难,因为我不认为SAS中有字符串函数。它将涉及使用COUNT%SUBSTR的组合。

答案 1 :(得分:5)

列表中的职位代码是

%let list_pos=%sysfunc(countw(%substr(&list,1,%index(&list,16AUG2014)+1)));  

干杯