在条件(sas)下跨行垂直求和

在条件(sas)下跨行垂直求和,sas,Sas,县…年龄组…人口 A…………1…………200 A…………2…………100 A…………3…………100 A…………全部…………400 B…………1…………200 因此,我有一个县的列表,我想找出每个县18岁以下人口占人口的百分比,作为上表中的一个例子,我想只加上年龄组1和2的人口,然后除以“所有”人口。在这种情况下,它将是300/400。我想知道是否每个县都能做到这一点。让我们将您的SAS数据集称为“HAVE”,并说它有两个字符变量(县和AgeGrp)和一个数字变量(人口)。假设在数据集中,每个县

县…年龄组…人口

A…………1…………200

A…………2…………100

A…………3…………100

A…………全部…………400

B…………1…………200


因此,我有一个县的列表,我想找出每个县18岁以下人口占人口的百分比,作为上表中的一个例子,我想只加上年龄组1和2的人口,然后除以“所有”人口。在这种情况下,它将是300/400。我想知道是否每个县都能做到这一点。

让我们将您的SAS数据集称为“HAVE”,并说它有两个字符变量(县和AgeGrp)和一个数字变量(人口)。假设在数据集中,每个县都有一个观测值,
AgeGrp='All'
,其中人口的值是该县的总数

为了安全起见,让我们按县对数据集进行排序,并在另一个数据步骤中对其进行处理,创建一个名为“WANT”的新数据集,其中包含县人口(TOT\u POP)的新变量、所需的两个年龄组值之和(TOT\u GRP)并计算比例(AgeGrpPct):


请注意,实际上并不需要包含
AgeGrp='All'
的观察;您还可以创建另一个变量来收集所有年龄组的运行总数。

让我们将您的SAS数据集称为“have”,并说它有两个字符变量(countryAgeGrp)和一个数字变量(Population)。假设在数据集中,每个县都有一个观测值,
AgeGrp='All'
,其中人口的值是该县的总数

为了安全起见,让我们按县对数据集进行排序,并在另一个数据步骤中对其进行处理,创建一个名为“WANT”的新数据集,其中包含县人口(TOT\u POP)的新变量、所需的两个年龄组值之和(TOT\u GRP)并计算比例(AgeGrpPct):


请注意,实际上并不需要包含
AgeGrp='All'
的观察;您也可以创建另一个变量来收集所有年龄组的运行总数。

如果您需要程序方法,请为18岁以下的人创建一个格式,然后使用PROC FREQ计算百分比。有必要使用此方法从数据集中排除“All”值(在源数据中包含摘要行通常是不好的做法)。 PROC TABLATE也可用于此目的

data have;
input County $ AgeGrp $ Population;
datalines;
A 1 200
A 2 100
A 3 100
A All 400
B 1 200
B 2 300
B 3 500
B All 1000
;
run;

proc format;
value $age_fmt '1','2' = '<18'
                other   = '18+';
run;

proc sort data=have;
by county;
run;

proc freq data=have (where=(agegrp ne 'All')) noprint;
by county;
table agegrp / out=want (drop=COUNT where=(agegrp in ('1','2')));
format agegrp $age_fmt.;
weight population;
run;
数据已经存在;
输入县$AgeGrp$人口;
数据线;
A 1200
A 2100
A 3100
A全部400人
B 1200
B 2300
B 3500
B全部1000
;
跑
proc格式;

值$age_fmt'1','2'='如果需要程序方法,请为18岁以下儿童创建一个格式,然后使用PROC FREQ计算百分比。有必要使用此方法从数据集中排除“All”值(在源数据中包含摘要行通常是不好的做法)。 PROC TABLATE也可用于此目的

data have;
input County $ AgeGrp $ Population;
datalines;
A 1 200
A 2 100
A 3 100
A All 400
B 1 200
B 2 300
B 3 500
B All 1000
;
run;

proc format;
value $age_fmt '1','2' = '<18'
                other   = '18+';
run;

proc sort data=have;
by county;
run;

proc freq data=have (where=(agegrp ne 'All')) noprint;
by county;
table agegrp / out=want (drop=COUNT where=(agegrp in ('1','2')));
format agegrp $age_fmt.;
weight population;
run;
数据已经存在;
输入县$AgeGrp$人口;
数据线;
A 1200
A 2100
A 3100
A全部400人
B 1200
B 2300
B 3500
B全部1000
;
跑
proc格式;
值$age_fmt'1','2'='