You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于SAS现有带日期后缀的code22变量创建对应status22变量?

SAS:仅为数据集中现有code22_&yymmdd变量创建对应status22_&yymmdd变量

现有代码在指定日期范围循环生成数组时,会尝试引用该范围内不存在的code22_&yymmdd变量,导致报错。需要调整逻辑,只针对数据集中实际存在的code22_开头且日期在指定范围内的变量,创建对应的status22_&yymmdd变量。

解决方案思路

  1. 从输入数据集have中提取所有以code22_开头的变量名,解析出日期后缀
  2. 筛选出日期落在from和to参数指定范围内的变量
  3. 基于筛选后的变量列表,动态生成对应的status22_变量和数组,避免引用不存在的变量

修改后的完整代码

data have;
  call streaminit(20230221);
  do id = 1 to 100;
    length code22_230101-code22_230131 code22_230201-code22_230228 $2 bwght0-bwght80 8;
    array code22 code22_:;
    array bwght22loop bwght:;
    do over code22;
      code22 = put(rand('integer',1,12),2.-L);
    end;
    do over bwght22loop;
      bwght22loop = put(rand('integer',1,12),2.-L);
    end;
    output;
  end;
run;

proc format;
  value $ code_to_status (default=2)
    '1','2','3','4' = 'R '
    Other   = 'NR'
  ;
run;

%macro example(from, to);
  %local from_date to_date code_vars status_vars;

  /* 将输入的日期字符串转换为SAS日期值 */
  %let from_date = %sysfunc(inputn(&from,yymmdd8.));
  %let to_date   = %sysfunc(inputn(&to,yymmdd8.));

  /* 从数据集中提取所有code22_开头的变量,并筛选日期在指定范围内的 */
  proc sql noprint;
    select name into :code_vars separated by ' '
    from dictionary.columns
    where libname = 'WORK' and memname = 'HAVE'
      and upcase(name) like 'CODE22_%'
      and input(substr(name,8),yymmdd6.) between &from_date and &to_date;
  quit;

  /* 生成对应的status22_变量名列表 */
  %let status_vars = %sysfunc(tranwrd(&code_vars,code22_,status22_));

  data want;
    set have;
    /* 仅使用筛选后的code22变量创建数组 */
    array code22 &code_vars;
    /* 定义对应status变量的长度 */
    length &status_vars $2;
    /* 创建status变量数组 */
    array status22 &status_vars;

    do over code22;
      status22 = put(code22, $code_to_status.);
    end;
  run;
%mend;

%example(20230115,20230214);

代码说明

  • 通过proc sql查询dictionary.columns系统表,精准获取WORK.HAVE中符合前缀和日期范围要求的code22_变量
  • 用tranwrd函数批量生成对应的status22_变量名,无需手动逐个编写
  • 数组定义和赋值仅针对筛选后的有效变量,彻底避免引用不存在的变量引发的错误

内容的提问来源于stack exchange,提问作者lydias

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 02:17:48