SAS从数据集中选择随机样本

SAS从数据集中选择随机样本,sas,sas-macro,Sas,Sas Macro,我知道要选择随机样本,我可以使用 proc surveyselect data = raw_data method = srs n=200000 out=sample_data; run; 但是,有时我的原始_数据的记录数小于200000。如果原始数据很小,我只想保留原始数据;如果它大于一百万条记录,我想从中随机选择20万条记录。我该怎么做 谢谢大家! 只需为n创建一个宏变量即可。您可以在下面执行此操作,也可以使用dictionary.tables或proc contents获取计数,而不实际

我知道要选择随机样本,我可以使用

proc surveyselect data = raw_data method = srs n=200000 out=sample_data;
run;
但是,有时我的原始_数据的记录数小于200000。如果原始数据很小,我只想保留原始数据;如果它大于一百万条记录,我想从中随机选择20万条记录。我该怎么做


谢谢大家!

只需为
n
创建一个宏变量即可。您可以在下面执行此操作,也可以使用
dictionary.tables
proc contents
获取计数,而不实际计算所有行(如果您没有理由怀疑这些值)

proc sql;
  select 
    case when count(1) < 1000000 then count(1) else 200000 end
    into :sampcount
    from yourdataset
  ;
quit;

proc surveyselect n=&sampcount. .... ;
run;
proc-sql;
挑选
如果计数(1)<1000000,则计数(1)否则200000结束
进入:sampcount
从您的数据集
;
退出
proc surveyselect n=&sampcount;
跑

RTM:您将找到一个选项SELECTALL@data_null_我认为OP需要[N1000000:nsam=200000],所以它比SELECTALL要复杂一些。