谁能告诉我这个数据步骤在做什么?我从未见过使用“ !!”还是之前的“双感叹号”?
data _null_;
set &dset_in.;
if i = _n_ then do i=1 to nvar;
call symput ("var" !! strip(put(_n_, 3.)), strip(Variabile));
call symput ("min" !! strip(put(_n_, 3.)), strip(lim_inf));
call symput ("max" !! strip(put(_n_, 3.)), strip(lim_sup));
end;
run;
循环的要点也将有所帮助,谢谢
答案 0 :(得分:3)
!根据文档是串联运算符:
代码正在创建一组宏变量VAR001,MIN001 MAX001,以将值存储在数据集中。通常,这是一个不好的做法,如果您需要这样做,通常可以采用一种更简单的方法。
答案 1 :(得分:1)
它仅用于串联(代表||
)。
答案 2 :(得分:1)
回答问题的第二部分,它在做什么:
有一个变量i
,该变量具有一些值,该值指示用户要从中检索值的行。到达该行时,三个变量中的值将存储在名称中具有行号的宏变量中(例如,如果i = 5,则它将占据第5行,并将这三个变量放在{{1}中) },&var005
,&min005
。
但是,此代码存在许多问题。首先,在该循环中重用&max005
是一个坏主意;虽然它不会永久地做任何事情,但可以轻松地进行其他功能/错误修复引起的细微变化。
第二,当前构造的循环毫无意义。它没有基于i
进行任何操作,因此只是将相同的3个值多次放入相同的3个宏变量中。在我看来,这是某人接受从互联网复制的代码,但被误解了。
应该应该做的事情是这样的:
i
这将使用自动数据步骤循环为名称中具有行号的每一行创建宏变量。不过,这只是一个猜测,除了我在这里看到的内容之外,对该程序一无所知。
但要注意的是,整个操作不是一个好主意。将数据值存储在宏变量中是不好的编程习惯。不要这样做。