【问题标题】:How to use a looped list to generate proc sql tables [duplicate]如何使用循环列表生成proc sql表[重复]
【发布时间】:2019-09-12 12:54:57
【问题描述】:

我正在尝试遍历一个列表并使用每个列表值来创建一个新表。

为此我编写了一个宏。

%macro loop(STlist);
%let nwords=%sysfunc(countw(&STlist));

%do i=1 %to &nwords;

%put %scan(&STlist, &i);

%LET ST_CD = %scan(&STlist, &i);

%end;
%mend;

%loop(&STATE);

这是我的状态列表:

%LET STATE = AK AL AZ AR CA CO CT DC DE FL GA HI ID IL IN IA KS KY LA ME MD MA MI MN MS MO MT NE NV NH NJ NM NY NC ND OH OK OR PA RI SC SD TN TX UT VT VA WA WV WI WY;

我每次都尝试使用列表中的每个州缩写创建 proc sql 表。

【问题讨论】:

  • 如果你想让宏生成 SQL 代码,那么它必须实际包含一些 SQL 代码。
  • 只需在第二个 %let 语句之后插入您的 SQL 代码并使用 &ST_CD。无论您需要在哪里使用州代码。
  • 这篇文章与您的previous question 有什么实质性不同?请使用所需信息编辑以前的版本,而不是用重复的问题淹没 StackOverflow。

标签: list loops sas


【解决方案1】:

例如,您的代码可能如下所示,它将创建 51 个名为 AK、AL 等的空数据集。

%macro loop(STlist);
  %let nwords=%sysfunc(countw("&STlist"));
  %put nwords=*&nwords.*;

  %do i=1 %to &nwords;
    %LET ST_CD = %scan(&STlist, &i);
    %put ST_CD=*&ST_CD.*;

    /* Create empty data set with one variable value1*/
    proc sql;
      create table &ST_CD.
      (value1 char 100);
    quit;
  %end;
%mend;

【讨论】:

    猜你喜欢
    • 2013-12-16
    • 2019-11-02
    • 2020-08-07
    • 1970-01-01
    • 1970-01-01
    • 2020-10-21
    • 2018-12-01
    • 1970-01-01
    相关资源
    最近更新 更多