统计描述——定量资料

data quantify;run; 
/*按人群筛选好的数据集data,where筛选出符合条件的param ,ord1为param在table中的位置*/
%macro quantify(data=,where=, param=,ord1=);
data length;
	set &data.;
	where aval ne . and &where.;
	if find(put(aval,best.),".")=0 then do;leng=1;pleng=8.0;format pleng 4.1;end;
		else do;leng=0.1**length(compress(scan(put(aval,best.),2,".")));
			pleng=8+0.1*length(compress(scan(put(aval,best.),2,".")));
			end;
 	keep parcat1 parcat2 paramcd leng pleng ;
 	proc sort nodupkey out=leng;by parcat1 parcat2 paramcd leng;
	proc sort data=leng nodupkey;by parcat1 parcat2 paramcd ;
run;
proc sql noprint;
	select leng into:leng from leng;
	select pleng into:pleng from leng; 
quit;
ods output  summary=quantify1;
proc means data=bh(where=(&where.)) n mean std  median min max ;
	var aval;
 run;
ods output close;
/*%put &leng. &pleng.+1;*/
 data quantify2;
	set quantify1 ;
	n_=put(aval_n,best.);
	mean_=put(round(aval_mean,&leng.),&pleng.);
	median_=put(round(aval_median,&leng.),&pleng.);
	std_=put(round(AVAL_StdDev,&leng.*0.1),%sysevalf(&pleng.+0.1));
	min_=put(aval_min,best.);
	max_=put(aval_max,best.);
	array quan[6] n_ mean_ std_  median_ min_ max_;
	do i=1 to 6;
	quan[i]=compress(quan[i]);
	end;
run;
data quantify;
length param $40;
	set quantify quantify2(in=b);
	if b then do;param="&param.";ord1=&ord1.;end;
	mean_std=strip(compbl(mean_||" ("||compress(std_||")"))) ;
	min_max=compbl(strip(min_||" - "||max_));
	if cmiss(n_, mean_, std_,  median_, min_, max_)=6 then delete;
	proc sort;by ord1 param ;
run;
%mend;
%quantify(data=bh,where=paramcd="COURSE" and parcat1="" and parcat2="",param=病程(月)[1],ord1=1);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值