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

如何快速从超大型SAS数据集抽取测试用随机样本?

针对超大型SAS数据集快速抽取测试样本的方法

你当前用proc surveyselect的方式会扫描整个1360亿行的数据集,这必然耗时极长。既然测试用样本不需要统计代表性,完全可以用更轻量的方法,以下是几种高效的实现:

1. 直接提取前10000条观测(最快)

利用SAS数据集选项obs=,让SAS读取到指定行数后立刻停止,无需处理剩余数据,速度是最快的:

libname input "/some_linux_path/";

data random_sample;
    set input.large_data (obs=10000);
run;

2. 抽取随机行(比前一种稍慢,但更随机)

如果不想只用前10000行,想要一定随机性(仍不保证统计代表性),可以通过随机行号直接定位读取,避免扫描全量数据:

libname input "/some_linux_path/";

data random_sample;
    call streaminit(123); /* 设置随机种子,可选,保证结果可重复 */
    do i = 1 to 10000;
        /* 生成1到总行数之间的随机行号 */
        point = ceil(rand('uniform') * n);
        /* 直接定位到目标行读取 */
        set input.large_data nobs = n point = point;
        output;
    end;
    stop; /* 循环结束后停止数据步 */
run;

注意:如果数据集是压缩格式或存在索引,nobs可能无法准确获取总行数,但对于测试场景影响极小。

3. 用PROC SQL限制输出行数

效果和第一种方法一致,语法更偏向SQL风格:

libname input "/some_linux_path/";

proc sql outobs=10000;
    create table random_sample as
    select * from input.large_data;
quit;

总结

如果只是为了代码测试,第一种方法是最优选择——实现最简单,速度最快,完全满足测试需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 05:52:17