这可能是一个相当简单的问题,但我是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的位置,我该如何获得它?
感谢您的帮助!
当您询问宏变量时,它与使用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)
干杯