目的:如何生成如下图所示的人口统计学的表格
要点:
1、连续型变量(基线体重、基线身高等)需要展示例数、均值、中位值、最小值、最大值;离散型变量(性别、民族等)需要展示例数和百分比。这些统计量如何计算?
2、统计量需要保留几位小数?
3、如何令前3个剂量组、后5个剂量组分别属于共同的列名SC(肌肉注射)和IV(静脉滴注)?
4、如何在不同变量之间添加空行(如体重和性别之间用空行分割)?
步骤:
1、整合数据集,得到需要的变量:各受试者的组别、体重、性别;
/*1-rawdata*/
data dm1;
merge dm rand wt(where=(visit='D-1'));
by subjid;
keep subjid sex weight grpn;
run;
/*2-generate total column*/
data dm2;
set dm1;
ouput;
grpn=9;
output;
run;
/*3-counts number of every group*/
proc sql noprint;
select count(*) into:n1-:n9
group by grpn;
quit;
/*4-builds relation between grpn and &nx.*/
proc format;
value total;
1 = &n1.
2 = &n2.
3 = &n3.
4 = &n4.
5 = &n5.
6 = &n6.
7 = &n7.
8 = &n8.
9 = &n9.;
run;
data dm3;
set dm2;
var1='weight';/*the purpose for merging statistics with maxlen*/
total=input(put(grpn,&total.),best.);
if find(weight,'.') then len1=length(scan(weight,2,'.'));
else len1=0;
/*5-generates different output format according to types of statistics:maxumum decimal places 4*/
proc sql noprint;
create table maxlen1 as
select "weight" as var1, max(len1) as maxl,
/*for medium, mean*/
case when (calculated maxl le 3) then
strip(put(8 + 0.1*(calculated maxl + 1),best.))
else strip(put(8 + 0.1*4,best.)) as maxl1,
/*for std*/
case when (calculated maxl le 2) then
strip(put(8 + 0.1*(calculated maxl + 2),best.))
else strip(put(8 + 0.1*4,best