【问题标题】:SAS Append datasets only if they existSAS 仅在数据集存在时附加数据集
【发布时间】:2022-01-09 02:10:36
【问题描述】:

我每个月都有许多同名的数据集,只是更改特定月份的结尾,例如我使用此代码调用的数据集:

TEMPCAAD.LIFT_&NOME_MODELO._&VERSAO_MODELO._'!! put(cur_month,yymmn6.));

分别称为“TEMPCAAD.LIFT_MODEL_V1_202021”、“TEMPCAAD.LIFT_MODEL_V1_202022”等...

我正在尝试追加所有数据集,但其中一些不存在,所以当我运行以下代码时出现错误

数据集“TEMPCAAD.LIFT_MODEL_V1_202022”不存在。

%let currentmonth = &anomes_scores;
%let previousyearmonth = &anomes_x12;


data _null_;
length string $1000;
cur_month = input("&previousyearmonth.01",yymmdd8.);
do until (cur_month > input("&currentmonth.01",yymmdd8.));
  string = catx(' ',trim(string),'TEMPCAAD.LIFT_&NOME_MODELO._&VERSAO_MODELO._'!! put(cur_month,yymmn6.));
  cur_month = intnx('month',cur_month,1,'b');
end;
call symput('mydatasets',trim(string));
%put &mydatasets;
run;


data WORK.LIFTS_U6M;
set &mydatasets.;
run;

如何仅附加现有数据集?

【问题讨论】:

    标签: sas macros sas-macro


    【解决方案1】:

    与其循环每个文件以查看它是否存在,不如直接从dictionary.tables 中提取所有数据集名称?

    libname TEMPCAAD "/home/kermit/TEMPCAAD";
    
    data tempcaad.lift_model_v1_202110 tempcaad.lift_model_v1_202111 tempcaad.lift_model_v1_202112;
    id = 1;
    output tempcaad.lift_model_v1_202110;
    id = 2;
    output tempcaad.lift_model_v1_202111;
    id = 3;
    output tempcaad.lift_model_v1_202112;
    run;
    
    %let nome_modelo = MODEL;
    %let versao_modelo = V1;
    
    proc sql;
      select strip("TEMPCAAD."||memname) into :dataset separated by " "
        from dictionary.tables
        where libname="TEMPCAAD" and memname like "LIFT_&NOME_MODELO._&VERSAO_MODELO.%";
    quit;
    
    data want;
      set &dataset.;
    run;
    

    您可以轻松调整where statement 以仅提取您希望附加的数据。如果您在其中指定宏变量,请记住加上双引号。

    【讨论】:

    • 这是一个不错的选择,但它需要的时间太长,我认为这是因为我在 TEMPCCAD 上有数千张表 :(
    • 尝试改用 DICTIONARY.MEMBERS。它应该花费更少的时间,因为它包含的属性更少。
    • 谢谢!!如果我不想在我的数据中使用一张表怎么办?设置 &dataset.;run; ?我问这个是因为我的表的名称与我想使用的表非常相似,但我不想使用的表名称相似
    • 您可以只调整 SQL 过程中的 where 语句 - 例如添加and memname ne <yourtablename>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-23
    • 2014-03-22
    • 1970-01-01
    相关资源
    最近更新 更多