Variables 特定变量的SAS统计参数,来自具有条件的数据

Variables 特定变量的SAS统计参数,来自具有条件的数据,variables,statistics,sas,conditional-statements,proc,Variables,Statistics,Sas,Conditional Statements,Proc,我有一个基于特定数据创建的变量。现在在这个新数据中,我需要计算不同的统计参数,但有条件 例如: *该新var的中值仅适用于obs,即其出生国不是意大利。 *仅当年龄>35岁时,不同var的平均值, *同一风险值的两种类型的Q1和Q3(例如女性和男性) 等等 我是使用PROC FREQ还是PROC MEANS?因为它包含所有这些属性?无论哪种方式,这对我都不起作用。我如何在数据的单个var上改革此过程 proc means data=dat2; where "birth_country" NE I

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

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

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

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

假设要汇总的变量被称为
var1
var2
,您可以这样做:

数据输入;
设置dat2;
如果出生国=“意大利”,则调用missing(var1);
如年龄35岁;;
跑

有关
proc means
中可用的各种语句和选项的更多详细信息,请查看。

我不会按照Alex a的建议创建单独的数据步骤。这可能是一个坏习惯,因为对于大型数据集,CPU成本可能非常高

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

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

“nway”选项禁止包含为性别生成的自动类型变量——类变量(正如Alex A.所指出的,SAS将为每个请求的度量生成三个级别或类型变量:2个为性别,1个为总体)

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

将“n”选项添加到Proc Means call中可以为您提供类变量的每个子集的频率,freq_uu变量只提供非缺失信息的总体样本,而不会按类语句的级别进行细分

或者,您可以使用“where”语句将数据读入Proc Means调用。我不确定,但我的印象是,使用'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;
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;