2016-03-07 169 views
0

我正在使用PROC SURVEYSELECT语句从一组整数中获得随机数。 SAS然后返回采样整数,但按升序排列,我需要它们保持随机顺序。我怎么会随机混合SURVEYSELECT声明的输出,或者只是让声明不要排序?我似乎无法找到任何让语句按照随机选择的顺序输出的选项。SAS proc surveyselect不排序输出

下面的代码:

proc surveyselect data=data noprint 
method=srs 
n=numOfSamps 
seed=123 
out=outputSet 
run; 

和往常一样,在此先感谢!

+0

你的数据是什么样的? OUT =与DATA =的顺序相同吗? –

回答

1

如果您只是想随机分类最终的分层样本,您可以使用ranuni()proc sort

data data; 
    set data; 
    rn = ranuni(12345); 
run; 
proc sort data = data; by rn; run; 
+0

这是我发现的最简单的解决方案,谢谢! – chtongueek

0

要生成x的整数大小n的随机排列,可以使用PROC PLAN。我不知道这是否适合你的SRS,但是你没有讲完整个故事吗?

proc plan; 
    factors x=10 of 100 random/noprint; 
    output out=x10; 
    run; 
    quit; 

enter image description here

0

这是SURVEYSELECT的默认设置,如果您有只是一个单一的SRS。

data have; 
    call streaminit(7); 
    do _order = 1 to 1e6; 
    intnum = floor(rand('Uniform')*1e9); 
    output; 
    end; 
run; 


proc surveyselect data=have noprint 
method=srs 
n=10000 
seed=123 
out=outputSet; 
run; 

你可以从包括_ORDER变量看,没有排序以任何方式 - 它仍然保留初始排序(并没有什么特殊之处,变量)。

现在,如果您正在使用上面代码中使用数据集名称所暗示的分层SRS(但您将其中的详细信息留下),则会进行排序,您需要包含_ORDER变量或类似的东西,然后通过该变量重新排序以返回到您的原始顺序。