SAS - 为数据集采样创建计数器变量
SAS - creating counter variable for dataset sampling
我是 SAS 的新手,想知道如何对数据集进行随机抽样。
我创建了一个数据集 work.seg
,然后从中采样 table。我想继续采样,直到重新采样的 prem 列的总和 table 大于某个数量。
在我当前的代码版本中,我认为它每次都会将 sumprem
重置为 0,因此它永远不会超过阈值,并且代码只是保持 运行.
data work.seg;
input segment . prem loss;
datalines;
AAA 5000 0
AAA 3000 12584
AAA 250 245
AAA 500 678
;
data work.test;
sumprem = 0;
row_i=int(ranuni(777)*n)+1;
set work.seg point=row_i nobs=n;
sumprem=sumprem+prem_i;
if sumprem>15000 then stop;
run;
你只需要替换 sumprem=0 to retain 语句并且 prem_i 是未识别的,改用 prem 变量
sumprem=0; /* Change this to next statement*/
retain sumprem 0;
由于您使用的是 POINT= 选项,因此无需让数据步骤的正常迭代发生。只需添加一个循环和一个输出语句。您可能还想对最大样本数设置上限。
data work.test;
do _n_=1 to 100000 until (sumprem>15000) ;
row_i=int(ranuni(777)*n)+1;
set work.seg point=row_i nobs=n;
sumprem + prem_i;
output;
end;
stop;
run;
我是 SAS 的新手,想知道如何对数据集进行随机抽样。
我创建了一个数据集 work.seg
,然后从中采样 table。我想继续采样,直到重新采样的 prem 列的总和 table 大于某个数量。
在我当前的代码版本中,我认为它每次都会将 sumprem
重置为 0,因此它永远不会超过阈值,并且代码只是保持 运行.
data work.seg;
input segment . prem loss;
datalines;
AAA 5000 0
AAA 3000 12584
AAA 250 245
AAA 500 678
;
data work.test;
sumprem = 0;
row_i=int(ranuni(777)*n)+1;
set work.seg point=row_i nobs=n;
sumprem=sumprem+prem_i;
if sumprem>15000 then stop;
run;
你只需要替换 sumprem=0 to retain 语句并且 prem_i 是未识别的,改用 prem 变量
sumprem=0; /* Change this to next statement*/
retain sumprem 0;
由于您使用的是 POINT= 选项,因此无需让数据步骤的正常迭代发生。只需添加一个循环和一个输出语句。您可能还想对最大样本数设置上限。
data work.test;
do _n_=1 to 100000 until (sumprem>15000) ;
row_i=int(ranuni(777)*n)+1;
set work.seg point=row_i nobs=n;
sumprem + prem_i;
output;
end;
stop;
run;