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

SAS自定义用户格式转换为宏程序实现咨询

SAS夏令时格式生成宏程序转换方案

完整转换后的宏代码

%macro create_dst_fmt(
    yr_beg=,  /* 起始年份,必选参数 */
    yr_end=,  /* 结束年份,必选参数 */
    fmtname=dst,  /* 生成的格式名,可选,默认值为dst */
    out_ds=DST_FMT  /* 中间生成的format输入数据集名,可选,默认值为DST_FMT */
);
    /* 必选参数校验 */
    %if &yr_beg.= or &yr_end.= %then %do;
        %put ERROR: 必须传入yr_beg(起始年份)和yr_end(结束年份)参数;
        %return;
    %end;

    data &out_ds.(drop=year);
        attrib hlo length=$1
            start dst_start end format=mmddyy10.;
        fmtname="&fmtname.";
        type="N";
        do year=&yr_beg. to &yr_end.;
            start= nwkdom(2, 1, 3, year)+1; /* 3月第二个周日次日为夏令时起始日 */
            end= nwkdom(1, 1, 11, year); /* 11月第一个周日为夏令时结束日 */
            dst_start= start - 1;
            label='*';
            output;
        end;
        /* 非夏令时区间的默认配置 */
        start=.;end=.;
        hlo="O";
        label='';
        output;
    run;
    proc format cntlin=&out_ds.; run;
%mend create_dst_fmt;

调用方法

  • 生成你原需求中2007-2020年的dst格式,直接执行如下代码即可:
%create_dst_fmt(yr_beg=2007, yr_end=2020);
  • 如需自定义格式名、中间数据集名,可指定可选参数:
%create_dst_fmt(yr_beg=2010, yr_end=2023, fmtname=dst_us, out_ds=work.dst_input);

注意事项

  • 宏运行后生成的格式会在当前SAS会话中直接生效,原有筛选日期、偏移小时数据的逻辑不需要做任何调整,和你原代码的运行效果完全一致
  • 支持参数传入其他宏变量,可适配批量生成多套不同年份区间夏令时格式的需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 23:12:01