Select SAS随机抽样,具有组大小

Select SAS随机抽样,具有组大小,select,random,sas,proc,survey,Select,Random,Sas,Proc,Survey,我有一个带有帐户的数据集,它的属性有9个主要属性。 每个属性组包含不同数量的帐户,其中两个组拥有大量更高数量的帐户。因此,当我使用PROC SURVEYSELECT时,每个层随机选择5个帐户,并且方法=SRS,我从包含更多帐户的属性中获得更多结果。 我该怎么纠正呢?如何在取样时让SAS考虑组的体积? 上述代码: PROC SURVEYSELECT DATA=FINAL_RANDOM OUT=FINAL_RANDOM_1 NOPRINT METHOD=srs SAMPSIZE

我有一个带有帐户的数据集,它的属性有9个主要属性。 每个属性组包含不同数量的帐户,其中两个组拥有大量更高数量的帐户。因此,当我使用PROC SURVEYSELECT时,每个层随机选择5个帐户,并且方法=SRS,我从包含更多帐户的属性中获得更多结果。 我该怎么纠正呢?如何在取样时让SAS考虑组的体积?

上述代码:

PROC SURVEYSELECT DATA=FINAL_RANDOM OUT=FINAL_RANDOM_1 NOPRINT 
     METHOD=srs
     SAMPSIZE = 5 
     SELECTALL;
     STRATA Account_Branch_Id ; 
RUN; 

以下是生成的数据示例,其中两个地层分支包含所有账户的35%,其他7个地层包含账户剩余30%的平均分布

问题中的代码确实从每个地层分支id中选择了5个样本,并随机超过属性风险

我不太擅长测量选择说你不能在地层中对风险进行“均匀”选择,但如果能够做到这一点,你需要指定一种方法=SRS以外的方法

范例

*survery选择


我不太明白你的意思,如果你用样本大小作为行数,你会得到你所在地层的确切行数

你的代码也是如此

PROC SURVEYSELECT DATA=*YOURDATASET* OUT=DATA 
 METHOD=srs
 SAMPSIZE = 5 
 SELECTALL;
 STRATA *YOUR_STRATA_VARIABLE*; 
RUN; 

《SAS指南》中“随机样本”节点中的N个观测值与代码中的SAMPSIZE之间的区别在于,N给出了观测值的总数,而SAMPSIZE给出了每个地层变量的数量。

SAMPSIZE=5将得到每个地层5个样本,所以我不知道你为什么说我从包含更多帐户的属性中得到更多结果,例如,我有5个属性组:1个有50000个帐户,2个有30000个帐户,3个有8000个帐户,4个有9000个帐户,5个有3000个帐户。我总共有100000个账户。当我执行PROC SERVEYSELECT时,我从属性1获取3个帐户,从属性4获取2个帐户,而不是每个帐户中获取一个。此外,实际上我有9个属性组。你写的是正确的和理解的,但是-你仍然没有迹象表明,例如在分支1中,4个帐户来自属性2,1个帐户来自属性3。我需要它给我每个属性中的1个,每个分支,知道我总共有9个属性。在最坏的情况下,不是来自同一属性的5个账户。那么,属性是指其他变量,如未平仓日期、示例数据生成器中的余额,以及可能在“幻想银行”中发现的其他“不稳定”或离散类型的变量,如账户类型、透支风险水平,最后一次调查总体满意度、相关账户数量、年龄段等?对将其视为9个风险等级;因此,这里给出的解决方案可能会再次给我,例如一家分行,目前为止有5个账户,但风险水平相同,忽略了9个不同级别的事实。我需要SAS确认有9个风险级别,并从5个不同级别向我提供5个帐户。如果某个或多个分行只有4个可能且合理的风险级别的账户,那么请给我4个不同风险级别的账户,另一个相同风险级别的账户。我希望我很清楚……谢谢:为了充分理解我的问题,您缺少了一个列:如果您添加另一个名为“属性”的列,从1到9,您可以看到每个帐户是从哪个属性到达的,因此每个分支机构有5个帐户,但统计上都来自同一个属性。
PROC SURVEYSELECT NOPRINT DATA=have OUT=want
     METHOD=srs
     SAMPSIZE = 5 
     SELECTALL
;
     STRATA Branch_Id ; 
RUN;

proc sql;
  create table sample_classes_with_zeros as
  select class.branch_id, class.risk,
    case when sample.risk then 1 else 0 end as z
  from (
    select distinct branch_id, risk from have 
  ) as class
  left join sample 
  on class.branch_id = sample.branch_id
   & class.risk = sample.risk
  ;

proc tabulate data=sample_classes_with_zeros;
  title "A SurveySelect SRS SAMPSIZE=5 sampling, risk distribution by branch";
  class branch_id risk;
  var z;
  table branch_id='', risk * z='' * sum='' * f=comma9. * [s=[width=1cm textalign=center]] / box='branch_id';
run;
PROC SURVEYSELECT DATA=*YOURDATASET* OUT=DATA 
 METHOD=srs
 SAMPSIZE = 5 
 SELECTALL;
 STRATA *YOUR_STRATA_VARIABLE*; 
RUN;