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

Sas SA基于给定的字符元素创建多个表,sas,Sas,更新我被告知使用数组是不可能的,因为数组的存储方式不同。这稍微改变了我的问题,但要点还是一样的。如何从给定的值向量(例如:天、周、月、年)最有效地生成所需的表,而无需多次重复代码?有没有办法简单地将给定的日期值替换为循环中的INTX 好的,这是我关于这个问题的最后一个问题,我保证。在一些好的建议之后,我正在使用INTX函数。但是,我只想循环选择和创建表的不同类别。我试过了,但没用 data; array period [*] $ day week month year; run; %

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

遗憾的是,这不起作用,因为我不知何故弄脏了数组引用。如果我能完成这一步,我的状态就会很好。

您可以用宏变量字符串替换数组:

%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

不能使用那样的数组。数组只在数据步骤内,它们在运行它们的单个数据步骤外没有任何意义。嗯,好的。我太习惯于用R做事情了,以至于这个术语把我弄糊涂了。是否有任何方法可以使用一些固定的字符元素列表循环该过程SQL?我可以在哪里定义(日、周、月、年、qtr)等,然后让它创建多个表?我想我可以复制并粘贴每个表的代码,但似乎一定有某种我看不到的方式。在R中,我只需要生成一个向量,并为每个元素运行n个循环,将其替换到SQL语句中。谢谢Shorack。这完全有道理。我在R工作了很长时间,在适应方面遇到了很多困难,但这真的很有帮助。这将帮助我在继续学习的同时完成当前的项目。不客气。请注意,我已经纠正了一些最后一分钟的打字错误和其他愚蠢的错误。确保你不复制它们。是的,没关系,我有时很难抄写代码,而且会遗漏一些东西,因为我有一个奇怪的复制粘贴预防计划,所以很难只输入正确的代码,我必须输入所有东西两次。再次感谢!