各位大神好,有一个程序,不知道为什么,无法正确输出百分数,请各位大神指教。以下是程序,由于公司文件加密了,没有办法上传文件,只能把数据截图。
/*三线表模版*/
proc template;
define style styles.trial;/*定义页面格式*/
style body / background=white foreground=black leftmargin=1in rightmargin=1in topmargin=0.75in bottommargin=1in;
style table from output / cellpadding=4pt cellspacing=0.25pt borderwidth=0.75pt bordercolor=black borderstyle=solid frame=hsides rules=groups;
style systemtitle from titlesandfooters / font=('宋体,Arial',9pt,bold);
style data / font=('宋体,Arial',9pt);
style header / font=('宋体,Arial',9pt);
end;
run;
***建立一个SAS宏mu,该宏有12个宏变量,分类变量分析;
%macro mu (in,para,order,n1,n2,type,class1,class2,class3,class4,class5,class6,label);
data kk;name="¶";run;
%do i=1 %to 3;
data aa&i;set bc18045b.∈if treat=&i;run;
***计算变量每个治疗组每一层的例数(包括0);
data ttl&i;run;
%do j=&n1 %to &n2;
data bb&j;set aa&i;if ¶=&j;run;
proc means data=bb&j noprint;
var ¶
output out=cc&j n=n&i;
run;
data dd&j;clss=%eval(&j+1);name="¶";seq=ℴrun;
data ee&j;merge dd&j cc&j;if n&i=. then n&i=0;run;
data ttl&i; set ttl&i ee&j;if clss^=.;run;
%end;
***计算变量每个治疗组每一层的百分数(包括0);
proc freq data=aa&i noprint; tables ¶/out=ff&i;run;
data gg&i;format pct&i 6.2;set ff&i;pct&i=percent if clss^=.;;run;
***合并变量每个治疗组每一层的例数和其所占的百分数并对其格式化和排序;
data hh&i;merge ttl&i gg&i;by clss;if pct&i=. then pct&i=0;
_&i=compress(n&i)||'('||compress(put(pct&i,6.2))||'%)';
keep clss name seq _&i;run;
data kk;length cate $30.;merge kk hh&i;by name;
if clss=%eval(&n1+1) then cate="&class1";
if clss=%eval(&n1+2) then cate="&class2";
if clss=%eval(&n1+3) then cate="&class3";
if clss=%eval(&n1+4) then cate="&class4";
if clss=%eval(&n1+5) then cate="&class5";
if clss=%eval(&n1+6) then cate="&class6";
run;
***计算变量每个治疗组的总例数并对其格式化和排序;
data ll (keep=n1 n2 n3 );set bc18045b.&in end=eof;
if treat=1 then n1+1;if treat=2 then n2+1;else if treat=3 then n3+1;
if eof;run;
data mm;length cate $30.;set ll;
cate='合计';
_1=compress(put(n1,20.));
_2=compress(put(n2,20.));
_3=compress(put(n3,20.));
name="¶";
seq=ℴ
clss=0;
drop n1 n2 n3;
run;
***合并变量每个治疗组的总例数和每一层的例数及百分数的格式化结果;
data nn;length label $30.;set mm kk;label="&label";run;
%end;
***合并描述性的数据集得到最终数据集;
data tab_out;set tab_out nn;if name^=' ';run;
%mend mu;
***宏mu结束;
***建立一个SAS宏rtf,定义表格输出格式;
%macro rtf(title1,title2);
proc sort data=tab_out;by seq clss; run;
***关闭传输目标listing同时打开word,用ods rtf将结果输出到word格式的指定文件中;
ods listing close;
ods rtf file="D:\工作-BE项目\2018BC045溴己新三周期\SAS\&title1..rtf" style=trial bodytitle;
title j=c &title2;
proc report data=tab_out nowd split='^';
column label cate _1 _2 _3;
define label/order=data '项目' order style(column)=[just=left];
define cate/order=data '分类' style(column)=[just=left];
define _1/order=data '受试制剂1' style(column)=[just=left];
define _2/order=data '受试制剂2' style(column)=[just=left];
define _3/order=data '参比制剂' style(column)=[just=left];
run;quit;ods rtf close;ods listing;
********清空临时数据集;
proc datasets nolist memtype=data library=work kill;run;quit;
%mend rtf;
***宏rtf结束;
****统计;
data tab_out;length name $10.;if name^=' ';run;
%mu (ae_20180903,ae_rel,1,1,5,6,肯定无关,可能无关,可能有关,很可能有关,肯定有关,,不良事件与试验药物关系);
%mu (ae_20180903,AE_degree,2,1,5,6,一级,二级,三级,四级,五级,,不良事件严重程度);
%mu (ae_20180903,AE_ending,3,1,6,6,死亡,持续,缓解,加重,已恢复/已治愈无后遗症,恢复/治愈有后遗症,不良事件转归);
%mu (ae_20180903,AE_measure,4,1,2,6,无,有,,,,,不良事件有无采取措施);
%rtf (2018BC045-AE_20180903,表1 2018BC045-AE_20180903);
附件列表