我写的宏中间的参数一般可设置多个数据集/变量,所以需要这个SeparateString把它拆分出来
- %macro SeparateString(InputString,OutputString);
- /**********************************************************************/
- /* 此宏用于将含有一组单词的字符串拆分为一个个的单词,并将这些单词依次 */
- /* 存放于一系列宏变量之中。注意,字符串中单词的定义为由字母、数字和下 */
- /* 下划线组成的一个整体,而分隔符可以为除字母、数字、下划线以及逗号之 */
- /* 外的其他任意字符。其中InputString是所选的字符串,OutputString是输 */
- /* 出的字符串前缀,不需要加最后的下划线。 */
- /* */
- /* 最终得到的是一组单词的宏变量&OutputString._Var1,&OutputString.Var2 */
- /* 等以及字符串所含单词数量的宏变量&OutputString._Num。 */
- /* */
- /* Created on 2012.9.18 */
- /* Modified on 2012.12.6 */
- /**********************************************************************/
- data SS_temp;
- Str="&InputString";
- run;
- data SS_temp;
- set SS_temp;
- Words=0;
- do while(SCAN(Str,Words+1,' ') NE "");
- Words+1;
- end;
- run;
- %global &OutputString._Num;
- proc sql noprint;
- select Words into :&OutputString._Num from SS_Temp;
- quit;
- %do SS_i=1 %to &&&OutputString._Num;
- %global &OutputString._Var&SS_i;
- %let &OutputString._Var&SS_i.=%SYSFUNC(SCAN(&InputString,&SS_i,' '));
- %end;
- /* 去除&OutputString._Num前后的空格 */
- %let &OutputString._Num=%SYSFUNC(TRIM(&&&OutputString._Num));
- /* 删除不必要的表格 */
- proc delete data=SS_temp;
- run;
- %mend;
- %macro Demo();
- %let InputString=12 -24;
- %let OutputString=a;
- %SeparateString(&InputString,&OutputString);
- %put &a_Num;
- %put &a_Var2;
- %mend;



雷达卡




京公网安备 11010802022788号







