2014-08-29 2 views
1

У меня есть пример кода SAS ниже. И я хочу знать, как прокомментировать процент, используя два десятичных формата. Например, я хочу поставить 100% как только нулевое десятичное число, а все остальные проценты, которые не являются 100% с 1 десятичным числом, например 25.0%.Создайте другой десятичный формат в отчете SAS proc и ODS

Вот мой код.

data a; 
infile datalines missover; 
input subjid trt itt safety pp complete enroll disreason; 
uncomplete=(complete^=1); 
datalines; 
1 1 1 1 1 1 1 
2 2 0 1 1 1 1 
3 1 1 1 1 0 1 4 
4 2 1 1 1 1 1 
5 1 1 1 0 0 1 5 
6 2 1 1 1 1 1 
7 2 1 1 1 0 1 1 
8 1 0 1 0 1 1 
9 1 1 1 1 0 1 5 
10 2 0 1 0 0 1 5 
11 2 1 1 1 0 1 1 
12 2 1 1 0 0 1 2 
13 1 1 1 0 0 1 3 
14 2 1 1 0 0 1 4 
; 
run; 
data b; 
set a(in=a) a(in=b); 
if b then trt=3; 
run; 
data c; 
length cat $20; 
set b; 
array a(6) itt safety pp complete uncomplete enroll; 
array b(5) r1 r2 r3 r4 r5; 
do i=1 to 6; 
cat=upcase(vname(a(i))); 
value=a(i); 
output; 
end; 
do j=1 to 5; 
if disreason=j then value=1; 
else value=0; 
cat=upcase(vname(b(j))); 
output; 
end; 
keep trt cat value; 
run; 
proc format ; 
value $newcat(notsorted) 
'ENROLL'='Enrolled Population' 
'1'='1' 
'PP'='Per-Protocol Population' 
'2'='2' 
'ITT'='ITT Population' 
'3'='3' 
'SAFETY'='Safety Population' 
'4'='4' 
'COMPLETE'='Patients Completed' 
'UNCOMPLETE'='Patients Discontinued' 
'5'='Primary Reason for Discontinuation of Study Dose' 
'R1'='\li360 Lack of Effect' 
'R2'='\li360 Protocol Violation' 
'R3'='\li360 Lost to Follow-up' 
'R4'='\li360 Adverse Event' 
'R5'='\li360 Personal Reason'; 
value trt 1='Treatment 1' 
2='Treatment 2' 
3='Overall'; 
picture pct(round) 
0<-100='0009)'(prefix='(' mult=100) 
0=0; 
run; 
option missing='' nodate nonumber orientation=landscape; 
ods rtf file='c:\dispoistion.rtf'; 
proc report data=c completerows nowd 
style(report)={frame=hsides rules=groups} 
style(header)={background=white}; 
column cat cat2 trt, value, (sum mean); 
define cat/group format=$newcat. preloadfmt order=data noprint; 
define cat2/computed ' ' style(column)={cellwidth=30% PROTECTSPECIALCHARS=OFF 
}; 
define trt/across format=trt. '' order=internal; 
define value/analysis ''; 
define sum/ 'N' style(column)={cellwidth=35pt} style(header)={just=right}; 
define mean/ '(%)' format=pct. style(column)={cellwidth=35pt just=left} 
style(header)={just=left}; 
compute cat2/char length=50; 
cat2=put(cat, $newcat.); 
if cat2 in ('1', '2', '3','4') then cat2=''; 
endcomp; 
run; 
ods rtf close; 

ответ

1

Вы должны использовать формат изображения:

data test; 
input x; 
datalines; 
0.5 
0.751 
0.999 
1.00 
;;;; 
run; 

proc format; 
picture pct100f 
-1 = [PERCENT7.0] 
-1<-<1 = [PERCENT7.1] 
1 = [PERCENT7.0] 
other=[BEST12.]; 
quit; 

proc print data=test; 
format x pct100f.; 
var x; 
run; 

Adjust, что в случае необходимости. Значение -1 <-< 1 означает anything that is between -1 and 1, exclusive. [PERCENT7.0] говорит ему использовать этот формат для этого раздела.

0

Попробуйте использовать этот формат:

define mean/ '(%)' format=percent7.1 
+0

Привет, это сработает, но оно преобразует весь процент в один десятичный знак, что я хочу сделать: если процент равен 100, то 100%, иначе% format = percent7.1. – user2668789

Смежные вопросы