У меня проблемы с получением отчета о выполнении, чтобы сделать то, что я хочу.
У меня есть таблица с состоянием, предметом, количеством, процентом от состояния и процентом от общего количества.Есть итоговые строки, в которых указывается сумма по штату и общая сумма.Моя проблема в том, что эти итоговые строки суммируют итоги состояния на уровне общего итога.вот так:
CODE:
proc report data=dataset nowd ;
columns state item count pct_state percent;
define state /order 'State';
define item / 'Status';
define count / '#';
define pct_state / '% of State';
define percent / '% of Total';
break after state/ol summarize;
compute after state;
item=catt(state,' Total');
state = '';
line @1 ' ';
endcomp;
rbreak after /ol summarize;
compute after;
involved = 'Grand Total';
endcomp;
run;
Составляет таблицу следующим образом:
State Item # %state %total
AL A 2 40.0% 20.0%
B 3 60.0% 30.0%
AL Total 5 100.0% 50.0%
MN A 1 20.0% 10.0%
B 1 20.0% 10.0%
C 3 60.0% 30.0%
MN Total 5 100.0% 50.0%
Grand Total 10 200.0% 100.0%
Как вы можете видеть, она сообщает о состоянии% итого как 200%, чтоэто бессмысленное число.Я бы предпочел, чтобы это не суммировало значение государства вообще.Я знаю, что веб-сайт sas предупреждает об использовании дат в таблицах со сводными строками, поскольку SAS интерпретирует их как числовые переменные и таким образом суммирует их ... но это не дает хорошего решения.Я действительно не понимаю, почему операторы BREAK
и RBREAK
не имеют опции "VAR", которая позволяет вам указать ... но теперь мне нужен обходной путь.
Что я придумалас - создать новую переменную и сохранить процент в виде текста, чтобы его нельзя было вычислить в сводке, но это действительно обратный способ сделать это.
data dataset; set dataset;
state_txt = trim(left(put(pct_state,percent10.1)));
run;
proc report data=dataset nowd ;
columns state item count state_txt percent;
define state /order 'State';
define item / 'Status';
define count / '#';
define state_txt / right '% of State';
define percent / '% of Total';
break after state/ol summarize;
compute after state;
item=catt(state,' Total');
state = '';
line @1 ' ';
endcomp;
rbreak after /ol summarize;
compute after;
involved = 'Grand Total';
endcomp;
run;
Это исключает все сводки(поскольку это символьная переменная), но кажется, что это просто ужасный способ делать вещи, когда я должен иметь возможность сказать что-то вроде rbreak after /summarize var=count percent;
и покончить с этим.Есть ли лучший способ сделать это?Кроме того, я бы не возражал, если бы он суммировался на уровне штатов до 100% ... это не приоритет, хотя и гораздо менее важно, чем заставить его НЕ говорить 200% на дне (или в случае полногоТаблица США, 5000%).
Пример данных:
data dataset;
length state item $50;
infile datalines delimiter=',';
input state item $ count percent pct_state;
datalines;
AL,A,8,0.0047,1.0000
DC,A,1,0.0006,0.5000
DC,B,1,0.0006,0.5000
FL,A,18,0.0107,0.7500
FL,B,2,0.0012,0.0833
FL,C,4,0.0024,0.1667
LA,A,434,0.2576,0.8314
LA,B,69,0.0409,0.1322
LA,C,19,0.0113,0.0364
MI,A,1,0.0006,1.0000
MS,A,4,0.0024,0.8000
MS,B,1,0.0006,0.2000
OK,A,2,0.0012,1.0000
PA,A,1,0.0006,1.0000
TX,A,943,0.5596,0.8435
TX,B,132,0.0783,0.1181
TX,C,43,0.0255,0.0385
VA,A,1,0.0006,1.0000
WI,B,1,0.0006,1.0000
;