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

如何在SAS中按分组保留随机行(去除公司ID重复项)

SAS数据集按ID随机保留唯一行的解决方案

你之前的代码存在两个关键问题:一是每个ID组只生成了一个随机数,导致同一ID下所有观测的随机值相同,排序后顺序没变化;二是proc sort的语法存在错误。以下是两种可行的修正方案:

方案一:生成独立随机数后排序去重

/* 为每个观测生成独立随机数 */
data temp;
  set have;
  /* 用系统时间作为种子,保证每次运行随机性不同;若需固定结果,替换为固定数字如12345 */
  random = ranuni(time());
run;

/* 按ID分组,组内按随机数排序 */
proc sort data=temp out=temp_sorted;
  by id random;
run;

/* 按ID去重,保留每组随机排序后的第一行 */
proc sort data=temp_sorted out=want nodupkey;
  by id;
run;

方案二:PROC SQL直接随机抽取(更简洁)

无需中间数据集,一步完成随机选取:

proc sql outobs=max;
  create table want as
  select *
  from have
  group by id
  having ranuni(time()) = max(ranuni(time()));
quit;

关键说明:

  • 两种方案的核心都是给每个观测生成独立随机值,通过随机排序或随机取值的方式,确保每个ID保留的行是随机选中的,而非固定首行。
  • 如果需要可复现的随机结果,把ranuni(time())替换为固定种子(比如ranuni(9876)),这样每次运行都会得到相同的随机选取结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 15:47:45