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

RHe*_*elp 3 sas sas-macro

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

我有一个宏变量 -

%let list = 12AUG2013 13AUG2013 15AUG2013 16AUG2014 09SEPT2014;
Run Code Online (Sandbox Code Playgroud)

我需要得到以下东西 -

a)列表中的总字数:在R中,这将是长度(列表).但在SAS中,长度计算每个角色.COUNTW不起作用.无论如何我能做到这一点?

b)找到第i个单词:如果我需要这个列表中的第3个元素,我会在R中列出[3].我怎么能在SAS中做到这一点?

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

感谢您的帮助!

mjs*_*squ 6

当您询问宏变量时,它与使用SAS数据步骤功能略有不同.您的问题提供了一个有用的示例,说明它们的区别 一些datastep函数具有微距功能的等同物%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.


小智 5

列表中的职位代码是

%let list_pos=%sysfunc(countw(%substr(&list,1,%index(&list,16AUG2014)+1)));  
Run Code Online (Sandbox Code Playgroud)

干杯