我在存储空间中有电子邮件列表,我将其包括在内,以便特定国家/地区的人员收到通知但出于演示目的,请使用一个:
我想根据变量& system:
动态选择地址%let SEList1 = "my.email@domain.eu";
%put system.list1.;
/*system.list1, which is ok*/
%put &system.list1.;
/*SElist1, which is ok*/
%put &&system.list1.;
/*SElist1, Hmm? Shouldn't this be "my.email@domain.eu"*/
%put &&&system.list1.;
/*"my.email@domain.eu", umm... ok? */
/*Lets keep going.... */
%put &&&&system.list1.;
/*SElist1. wut? */
%put &&&&&system.list1.;
/*"my.email@domain.eu"*/
%put &&&&&&system.list1.;
/*"my.email@domain.eu"*/
%put &&&&&&&system.list1.;
/*&"my.email@domain.eu"*/
%put &&&&&&&&system.list1.;
/*SElist1. You got to be kidding me?*/
问题:
a)为什么不&&没有决心解决,但&&&呢?
b)地球上正在发生的水平为& * 4 +
答案 0 :(得分:5)
当SAS宏处理器看到两个和号&&
时,它会将其解析为一个&
,并设置一个标志,指示需要重新处理字符串以获得更多宏变量分辨率。
因此,&&&system.list1.
被处理为&&
,&system.
和list1.
,其中间值为&SElist1.
。因此,在第二遍中,您将获得间接宏变量引用的值。
178%让SEList1 =" my.email@domain.eu" ;;
179%让系统= SE;
180个选项symbolgen;
181%放置&&& system.list1。;
符号:&&解析为&。
SYMBOLGEN:宏变量SYSTEM解析为SE
SYMBOLGEN:宏变量SELIST1解析为" my.email@domain.eu" " my.email@domain.eu"
如果您只有两个&&
,则中间值仅为&system.list1.
,它将分为&system.
和list1.
,因此结果应为SElist1.
< / p>
您可以添加任意数量的内容并遵循此规则。例如,如果您在第一次传递后有6次,那么就像您从3开始一样,因为每对只减少到1。因此使用6会产生与使用3相同的结果,但它只需要在解析字符串时需要额外的传递。