SAS基于给定的字符元素创建多个表

时间:2013-07-15 21:24:50

标签: sas


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

可悲的是,这不起作用,因为我以某种方式搞砸了数组引用。如果我能够迈出这一步,我将会处于良好的状态。

1 个答案:

答案 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