作者yonny (悠逆)
看板Statistics
标题[程式] SAS MACRO问题
时间Fri Feb 19 23:41:23 2016
[软体程式类别]: SAS
[程式问题]: MARCRO Multiple ampersands(&)
[软体熟悉度]: 熟悉
[问题叙述]:
今天在看 SAS advanced MACRO的部分
里面有讲到Re-Scan Rule的部分
the macro processor resolves two ampersand(&&) to one ampersand(&)
在部分我有些疑惑的地方
[程式范例]:
例如:
%let A = C; %let B = A; %put &&B/*答案是A*/;
&B = A
&&B -> &B = A (所以&B和&&B的值其实一样的)
虽然知道SAS规定的原则就是这样
但不知道这样的规定是有什麽好处吗?为什麽要这样定?
既然&B和&&B的值相同 那为什麽还要有&&B ?
直觉上会觉得
&B=A 那&&B会等於&A又等於C 这样比较合理
SAS为什麽不这麽设定?
另外还有一个问题 例如:
%let var1 = one;
%let var2 = two;
%let var3 = three;
%let crs=3;
当
%PUT &&var&crs;
答案是three, 因为会变成&var3 = three
但当
%PUT &var&crs;
就会跑出
WARNING: Apparent symbolic reference VAR not resolved.
&var3
心理觉得很疑惑
%PUT &&var&crs; 就会跑出正确的答案
而%PUT &var&crs; 不是也是&var3 为什麽不会跑出three?
内心真的非常疑惑
十分感谢大家解答!!!
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 61.224.172.26
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Statistics/M.1455896486.A.394.html
※ 编辑: yonny (61.224.172.26), 02/19/2016 23:44:18
1F:→ BugEater: 有些想当然咯,&var&crs,SAS是当作两个macro v, 03/03 11:07
2F:→ BugEater: 不好意思没有看到後面有大大回复了 03/03 11:08