SAS如何创建宏程序procsurveyselect
SAS how to create a macro program procsurveyselect
我需要在 500k 数据的 df 上进行随机简单采样而不替换 50k。
所以我有这个数据框位于 lib_d1.df
|变量 A |变量 B ||变量 C |变量 D ||变量 E |变量 F ||变量 G |变量 H |
我要制作宏程序data_sample(list_var,nb_obs,table_name)
%macro data_sample(list_var, nb_obs, table_name)
data_null_ nobs= n;
Set lib_d1.df;
call symput("nb_obs", n);
run;
proc surveyselect seed=30602 data=&list_var n=&nb_obs out=&table_name;
run;
%mend
%let list_var= Var A, Var D, Var E, Var H;
&let nb_obs= &nb_obs;
%let table_name= data_50000;
%data_sample(list_var,nb_obs,table_name);
是的,这就是我所在的位置,我不知道什么是对的(或什么是错的...任何帮助将不胜感激)
首先,您可能要考虑重命名所有变量的名称以符合 SAS naming conventions。我不建议使用名称中带有 space 的变量。但是,如果您希望保持当前的数据集不变,请尝试以下操作:
%macro data_sample(input=,list_var=,obs=,output=);
proc surveyselect seed=30602
data=&input.(keep= &list_var.)
n=&obs.
out=&output.;
run;
%mend;
%data_sample(input=have,
list_var='Var A'n 'Var D'n 'Var E'n 'Var H'n,
obs=50000,
output=want);
method=srs
是简单随机抽样,是等概率选择,不放回。在 PROC SURVEYSELECT 文档中查找更多信息。默认情况下,这设置为 SRS,但总是很高兴知道。
顺便说一句,我不认为你做的第一个数据步骤会 运行 因为 nobs=n
必须放在 set 语句之后。另外,如果您只对 50 000 个观测值的固定样本感兴趣,我不知道为什么要计算数据集中观测值的数量。
如果您想使用数据集中的观测值计算宏变量(在这种情况下 nbobs
),我建议考虑使用以下方法:
data _null_;
if 0 then set lib_d1.df nobs=n;
call symputx('nbobs',n);
stop;
run;
我需要在 500k 数据的 df 上进行随机简单采样而不替换 50k。
所以我有这个数据框位于 lib_d1.df
|变量 A |变量 B ||变量 C |变量 D ||变量 E |变量 F ||变量 G |变量 H |
我要制作宏程序data_sample(list_var,nb_obs,table_name)
%macro data_sample(list_var, nb_obs, table_name)
data_null_ nobs= n;
Set lib_d1.df;
call symput("nb_obs", n);
run;
proc surveyselect seed=30602 data=&list_var n=&nb_obs out=&table_name;
run;
%mend
%let list_var= Var A, Var D, Var E, Var H;
&let nb_obs= &nb_obs;
%let table_name= data_50000;
%data_sample(list_var,nb_obs,table_name);
是的,这就是我所在的位置,我不知道什么是对的(或什么是错的...任何帮助将不胜感激)
首先,您可能要考虑重命名所有变量的名称以符合 SAS naming conventions。我不建议使用名称中带有 space 的变量。但是,如果您希望保持当前的数据集不变,请尝试以下操作:
%macro data_sample(input=,list_var=,obs=,output=);
proc surveyselect seed=30602
data=&input.(keep= &list_var.)
n=&obs.
out=&output.;
run;
%mend;
%data_sample(input=have,
list_var='Var A'n 'Var D'n 'Var E'n 'Var H'n,
obs=50000,
output=want);
method=srs
是简单随机抽样,是等概率选择,不放回。在 PROC SURVEYSELECT 文档中查找更多信息。默认情况下,这设置为 SRS,但总是很高兴知道。
顺便说一句,我不认为你做的第一个数据步骤会 运行 因为 nobs=n
必须放在 set 语句之后。另外,如果您只对 50 000 个观测值的固定样本感兴趣,我不知道为什么要计算数据集中观测值的数量。
如果您想使用数据集中的观测值计算宏变量(在这种情况下 nbobs
),我建议考虑使用以下方法:
data _null_;
if 0 then set lib_d1.df nobs=n;
call symputx('nbobs',n);
stop;
run;