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

编写SAS脚本删除4年以上归档库中带日期命名的数据集

SAS归档数据集清理脚本修正

原代码的核心问题

  • 仅扫描WORK库,未遍历你提到的8个归档SAS库
  • by memname语句末尾缺分号,触发语法错误
  • 删除条件逻辑反转:原代码会删除4年内的数据集,而非4年以上的
  • RETAIN语句多余,且变量定义顺序与读取逻辑不匹配
  • 未校验数据集名称中的日期有效性,可能误删命名不符合规则的数据集

修正后的完整脚本

%macro clean_old_datasets(libraries=); /* 传入要遍历的库列表,例:libraries=ARCHIVE1 ARCHIVE2 ... */
    options mlogic;

    /* 遍历指定所有库,获取数据集元数据 */
    PROC CONTENTS DATA=&libraries.._ALL_ OUT=contents NOPRINT;
    RUN;

    /* 按库名+数据集名去重,避免CONTENTS输出的多行变量记录重复 */
    proc sort data=contents nodupkey;
        by libname memname;
    run;

    /* 筛选需删除的数据集,生成删除语句并记录日志 */
    DATA work.deleted_log;
        length libname $15 memname $32 delete_time 8;
        format delete_time datetime20.;
        SET contents(KEEP=LIBNAME MEMNAME) end=eof;
        
        /* 提取数据集名称中的YYYYMM部分,转换为日期 */
        date_str = scan(memname, -1, '_');
        if length(date_str) = 6 then do;
            dataset_date = input(cats(date_str, '01'), yymmdd8.);
            /* 判断是否早于4年前的年初 */
            if dataset_date < intnx('year', today(), -4, 's') then do;
                delete_time = datetime();
                /* 批量生成DROP语句 */
                if _n_ = 1 then call execute('proc sql;');
                call execute(catx(' ', 'drop table', catx('.', libname, memname), ';'));
                output; /* 写入删除日志 */
            end;
        end;
        /* 结束SQL会话 */
        if eof then call execute('quit;');
    RUN;

    %put 清理完成,删除记录已保存至WORK.DELETED_LOG;
%mend;

/* 调用宏,替换为你的8个归档库名 */
%clean_old_datasets(libraries=ARCHIVE1 ARCHIVE2 ARCHIVE3 ARCHIVE4 ARCHIVE5 ARCHIVE6 ARCHIVE7 ARCHIVE8);

关键改进说明

  • 新增libraries宏参数,支持传入任意数量的目标库,解决原代码仅扫描WORK库的问题
  • 增加日期有效性校验,仅处理命名符合tablename_YYYYMM规则的数据集
  • 修正删除逻辑:intnx('year', today(), -4, 's')生成4年前的1月1日,数据集日期早于该值则删除
  • 用nodupkey排序去重,避免重复执行DROP语句
  • 明确记录删除时间和数据集信息到日志表,方便追溯

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 16:13:28