zhu*_*oer 9 sas ampersand sas-macro
%let test = one;
%let one = two;
%put &test;
%put &&test;
%put &&&test;
%put &&&&test;
%put &&&&&test;
Run Code Online (Sandbox Code Playgroud)
好.我完全被这些&符号击败了.我不明白他们为什么在宏变量之前需要那么多的&符号.有没有什么技巧可以掌握&符号的用法?顺便说一下,五个结果相应的是什么?
Joe*_*Joe 14
只需一套&符号,你得到的就是很无聊; 在一个之后,奇数个&符导致两次解析,偶数个&符号解析一次.所以你使用1个&符号来解决一次和3个&符号来解决两次,除非你拥有拥有和号权利的公司的股票.
更有趣的是以下测试,它显示了为什么偶数个&符有价值:
%let test = one;
%let testtwo = one;
%let one = two;
%let two=three;
%put &test&one;
%put &&test&one;
%put &&&test&one;
%put &&&&test&one;
%put &&&&&test&one;
%put &&&&&&test&one;
Run Code Online (Sandbox Code Playgroud)
基本上,每次通过,SAS都会做以下事情:
这些是同时迭代完成的,直到所有的&符号消失,并且每个结果都保留用于下一次迭代,并且不影响当前的迭代.因此,&test&one成为onetwo因&test- >一个和&one- >两项.剩下的步骤:
&&test&one- > &testtwo- > one. &&|test|&one.&&测试前的两倍&,测试仍然存在,然后&one解决two.这留下&testtwo了解决的第二遍one.&&&test&one- > &onetwo- >无法解决. &&|&test|&one- > &|one|two- > DNR. &&&&test&one- > &&testtwo- > &testtwo- >一个. &&|&&|test|&one- > &&|testtwo- > &testtwo- >一个.两对各自分解为一对,形成一对,然后解析为一对,然后离开&testtwo以解决.&&&&&test&one 类似于三个&符号,但有一对额外的.&&&&&&test&one做出&&&testtwo决议以&one解决两个问题. &&|&&|&&|test|&one- > &&|&testtwo- > &one- >两个.奇数对意味着我们再得到一组结算.在一天结束时,您需要记住:
&&prefix&suffix).&&&var- > &var2- > var3).&prefix=var,&suffix=2] &&&&&&prefix&suffix- > &&&var2- > &var3- > 4).除此之外,4个或更多(除了6个)仅适用于特别复杂的组合; 额外的水平将用于延迟解决直到特定时间.