0

更新有人告诉我这是不可能使用数组的,因为它们的存储方式。这稍微改变了我的问题,但要点仍然相同。我怎样才能最有效地从给定的值向量(例如:日、周、月、年)生成我需要的表,而无需多次重复代码?有没有办法简单地将给定的日期值替换为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

可悲的是,这不起作用,因为我以某种方式弄乱了数组引用。如果我能做到这一步,我的状态就会很好。

4

1 回答 1

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

于 2013-07-15T22:21:23.793 回答