这可能是一个相当简单的问题,但我是SAS新手,即使在谷歌研究过这个问题之后我也很无能为力。
我有一个宏变量 -
%let list = 12AUG2013 13AUG2013 15AUG2013 16AUG2014 09SEPT2014;
我需要做以下事情 -
a)列表中的总字数:在R中,这将是长度(列表)。但在SAS中,长度计算每个角色。 COUNTW不起作用。无论如何我可以这样做吗?
b)找到第i个字:如果我需要此列表中的第3个元素,我会在R中列出[3]。我怎么能在SAS中这样做?
c)找到元素的位置:假设我需要知道16AUG2014在列表变量中的位置,我该如何获得它?
感谢您的帮助!
答案 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)));
干杯