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

如何在SAS的DO循环中动态获取数据集的行数

在SAS里要动态获取数据集行数替代固定值,有两种常用方法,都能实现类似R中nrow()的效果:

方法1:用PROC SQL获取行数并存入宏变量

先通过PROC SQL统计数据集的行数,把结果存入一个宏变量,之后在数据步的do循环里引用这个宏变量即可:

/* 统计original_data的行数,存入宏变量dsn_rows */
proc sql noprint;
    select count(*) into :dsn_rows trimmed from original_data;
quit;

/* 在数据步中引用宏变量,实现动态循环次数 */
data original_data1;
    set original_data;
    do i = 1 to &dsn_rows.;
       new_val = var2 + 44;
    end;
run;

trimmed选项用来去除宏变量值前后的空格,避免引用时出现语法错误。

方法2:用数据步的END选项和CALL SYMPUTX

通过数据步遍历数据集,当读到最后一行时,用_n_(当前观测数)获取总行数,并存入宏变量:

/* 遍历数据集,将总行数存入宏变量dsn_rows */
data _null_;
    set original_data end=last_row;
    if last_row then call symputx('dsn_rows', _n_);
run;

/* 同样在数据步中引用宏变量 */
data original_data1;
    set original_data;
    do i = 1 to &dsn_rows.;
       new_val = var2 + 44;
    end;
run;

两种方法都能实现动态获取行数的需求,可根据习惯选择。需要注意的是,宏变量默认全局有效,只要在引用前执行获取行数的代码即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 23:33:16