【问题标题】:SAS statistic parameters of specific variables from data with conditions特定变量的SAS统计参数来自有条件的数据
【发布时间】:2015-05-01 17:11:30
【问题描述】:

我有一个基于特定数据创建的变量。现在在这个新数据中我需要计算不同的统计参数,但有条件 例如: *此新变量的中位数仅适用于其出生国不是意大利的 obs。 *仅当年龄>35 时,不同变量的平均值, *Q1 和 Q3 的 2 种相同 var (例如女性和男性) 等等。 我应该使用 PROC FREQ 还是 PROC MEANS- 因为它包含所有这些统计数据?无论哪种方式,这对我都不起作用..如何在数据中的单个 var 上修改此过程?

proc means data=dat2;
where "birth_country" NE Italy";
run;

proc means data dat2;
where Mage>=35;
run;

【问题讨论】:

    标签: variables statistics sas conditional-statements proc


    【解决方案1】:

    我不会像 Alex A 所建议的那样创建单独的数据步骤。这可能是一个不好的习惯,因为对于大型数据集,它在 CPU 方面的成本可能非常高。

    相反,我会将 Proc Means 调用子集化,但与 Alex A 的建议略有不同,因为您可能不希望从“by”语句生成的输出,因为“by”语句要求数据按“by”排序' 变量(另一个代价高昂的 CPU 错误要最小化):

    proc means data=dat2(where=(country ne 'ITALY')) 
               median n mean q1 q3 noprint nway;
    var NewVar;
    output out=median1(drop=_:) n=n median=median mean=mean q1=q1 q3=q3;
    run;
    proc print data=median1;
    run;
    
    proc means data=dat2(where=(age>35)) n median mean q1 q3 noprint nway;
    var DiffVar;
    class sex;
    output out=median2(drop=_:) n=n median=median mean=mean q1=q1 q3=q3;
    run;
    proc print data=median2;
    run;
    

    “noprint”选项禁止 SAS 将输出写入列表文件。

    “nway”选项禁止包含为性别生成的自动 _ type_ 变量 - 类变量(正如 Alex A. 所指出的,SAS 将为每个请求的指标生成三个级别或 _ type_ 变量:2 表示性别和一个整体)。

    'drop=_:' 语句会删除第一个字符中带有下划线的任何变量。对于 Proc Means,这将包括自动变量 _type_ 和 _freq_ 以及数据集中以下划线开头的任何其他变量。

    在 Proc Means 调用中添加 'n' 选项可为您提供类变量的每个子集的频率,其中 _freq_ 变量仅为您提供非缺失信息的整体样本,并且不会按类的级别对其进行分解声明。

    或者,您可以使用“where”语句将数据读入 Proc 均值调用。我不确定,但我的印象是使用“data=”调用对数据进行子集化在计算上更有效。我从通用 SAS 规则中推断出这一点,即尽可能避免可执行语句并将“if”、“where”和其他命令保持在 PDV(程序数据向量)级别:

    proc means data=dat2 median n mean q1 q3 noprint nway;
    var NewVar;
    where country ne 'ITALY';
    output out=median1(drop=_:) n=n median=median mean=mean q1=q1 q3=q3;
    run;
    

    【讨论】:

      【解决方案2】:

      您可以在输入数据集中将不需要的值设置为缺失值,因为proc means 会忽略缺失值。然后,您可以在单个 var 语句中使用所有需要的变量。

      假设您要汇总的变量分别称为var1var2,您可以这样做:

      data input;
          set dat2;
          if birth_country = "Italy" then call missing(var1);
          if age <= 35 then call missing(var2);
      run;
      
      proc means data = input mean median q1 q3;
          class sex;
          var var1 var2;
      run;
      

      使用class sex; 将按性别和整体为您提供结果。

      如果这似乎太难以理解,您可以将其分解为多次调用proc means

      proc means data = dat2 mean median q1 q3;
          class sex;
          var var1;
          where birth_country ^= "Italy";
      run;
      
      proc means data = dat2 mean median q1 q3;
          class sex;
          var var2;
          where age > 35;
      run;
      

      有关proc means 中提供的各种语句和选项的更多具体细节,请查看SAS documentation for that procedure

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-12-23
        • 1970-01-01
        • 2015-12-26
        • 1970-01-01
        • 2021-10-20
        • 1970-01-01
        • 2021-09-12
        • 2013-11-18
        相关资源
        最近更新 更多