UPDATE 我被告知使用数组是不可能的,因为它们存储的方式。这改变了我的问题,但要点仍然是一样的。如何从给定的值向量(例如:日,周,月,年)最有效地生成我需要的表,而不必多次重复代码?有没有办法简单地将给定的日期值替换为循环中的INTX
?
好的,这是我关于这个问题的最后一个问题,我保证。经过一些好的建议后,我正在使用INTX
函数。但是,我想循环遍历我选择的不同类别并创建表格。我试过这个,但无济于事。
data;
array period [*] $ day week month year;
run;
%MACRO sqlloop;
proc sql;
%DO k = 1 %TO dim(&period); /* in case i decide to drop/add from array later */
%LET bucket = &period[&k];
CREATE TABLE output.t_&bucket AS (
SELECT INTX( "&bucket.", date_field, O, 'E') AS test FROM table);
%END
quit;
%MEND
%sqlloop
可悲的是,这不起作用,因为我以某种方式搞砸了数组引用。如果我能够迈出这一步,我将会处于良好的状态。
答案 0 :(得分:1)
您可以使用宏变量字符串替换数组:
%let period=day week month year;
在宏中,然后循环遍历宏变量中的单词:
%MACRO sqlloop;
proc sql;
%DO k = 1 %TO %sysfunc(countw(&period.)); /*fixed extra s*/
%LET bucket = %scan(&period.,&k.);
CREATE TABLE output.t_&bucket AS (
SELECT INTNX( "&bucket.", date_field, 0, 'E') AS test FROM table);
%END;
quit;
%MEND;
%sqlloop
编辑你显然忘记了一些分号。 :P