【问题标题】:How to determine a subset selecting a percentage of population?如何确定选择人口百分比的子集?
【发布时间】:2020-03-23 14:15:59
【问题描述】:

我需要计算人口的百分比。具体来说,我需要 10% 的初始人口来确定一个新的子集。 我尝试使用

proc sql;
select time, 
      count(*)*0.1
from table1
group by 1;
quit;

它有效,因为我有我想要的人口百分比。但是,我很难找到一种方法来允许我包含另一个条件(where var1>0 and var2=24),其中变量来自原始数据集(即var1var2 来自 table1)。 你知道我该怎么做吗?

【问题讨论】:

    标签: sql sas proc-sql


    【解决方案1】:

    假设您有 1,000 个项目(行),您希望从中抽取 10% 的随机样本。

    Proc SURVEYSELECT 可能是选择样本的最佳方式。

    data have;
      do id = 1 to 1000; output; end;
    run;
    
    proc surveyselect noprint data=have method=srs rate=10 out=want;
    run;
    

    基于随机数的 SQL 选择可以提供粗略的模拟,但不能产生精确的 10% 采样率。

    proc sql;
      create table want as
      select id from have
      where rand('uniform') <= 0.10  %* roughly 10% of a uniform distribution;
    ;
    

    还有其他方法,例如带有k/n算法的DATA步。

    data want;
      call streaminit(123);
    
      do k=0.10*N by 0 while (k > 0);
        set have nobs=n;
    
        if rand('UNIFORM') <= k/n then do;
          k + (-1);
          output;
        end;
        n +(-1);
      end;
    
      stop;
    run;
    

    【讨论】:

    • 谢谢理查德。按照您建议的方式,即使我选择 10%,我是否可以从原始数据集中选择变量(或所有变量)?我的疑问是使用这些变量,因为在 proc sql 中使用 count(*) 是不可能的。
    • 所有三个示例都选择了整行,因此所有变量都可用。如果您想减少样本数据集中变量的数量,请使用数据集选项(KEEP=&lt;list of variables&gt;)
    • 谢谢你,理查德
    猜你喜欢
    • 1970-01-01
    • 2016-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-13
    • 2016-02-26
    • 2020-10-06
    • 2021-11-24
    相关资源
    最近更新 更多