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

SAS DATA步中如何获取当前表名以标记数据来源表?

解决方案

SAS中可以通过SET语句的INDSNAME选项直接获取当前观测所属的数据集名称,无需手动写多分支判断,实现代码如下:

DATA FINAL_TABLE;
    /* INDSNAME选项会将当前读取的数据集名存入临时变量dsn中 */
    SET TBL_202101 - TBL_202109 INDSNAME=dsn;
    /* 提取数据集名中最后一个下划线后的年月部分,转为数值型存入table_origin */
    table_origin = input(scan(dsn, -1, '_'), best32.);
RUN;

方案说明

  • INDSNAME是SAS 9.2及以上版本支持的SET语句选项,赋值的dsn为临时字符变量,值为当前观测所属数据集的完整名称(含库名)
  • 用scan(dsn, -1, '_')可以匹配任意库名前缀,直接提取TBL_xxx后缀的年月数字,适配性更高
  • 如果需要table_origin为字符类型,去掉input()转换函数即可

如果使用的是不支持INDSNAME的老版本SAS,可以用IN=逐表标记的方式实现:

DATA FINAL_TABLE;
    SET 
        TBL_202101 IN=ds202101
        TBL_202102 IN=ds202102
        TBL_202103 IN=ds202103
        TBL_202104 IN=ds202104
        TBL_202105 IN=ds202105
        TBL_202106 IN=ds202106
        TBL_202107 IN=ds202107
        TBL_202108 IN=ds202108
        TBL_202109 IN=ds202109
    ;
    IF ds202101 THEN table_origin = 202101;
    ELSE IF ds202102 THEN table_origin = 202102;
    ELSE IF ds202103 THEN table_origin = 202103;
    ELSE IF ds202104 THEN table_origin = 202104;
    ELSE IF ds202105 THEN table_origin = 202105;
    ELSE IF ds202106 THEN table_origin = 202106;
    ELSE IF ds202107 THEN table_origin = 202107;
    ELSE IF ds202108 THEN table_origin = 202108;
    ELSE IF ds202109 THEN table_origin = 202109;
RUN;

该方案兼容性更高,但待拼接表数量较多时编写成本更高。

注意事项

拼接前请确认所有待合并的表字段结构完全一致(字段名、字段类型、长度匹配),避免出现字段截断、自动转缺失值等异常问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 05:09:00