Использование SAS EG для получения процентов - снова - PullRequest
0 голосов
/ 10 мая 2018

Надеюсь, это относительно простой вопрос для кого-то, кто сможет мне помочь. Я новичок в SAS (и программирование).

У меня есть набор данных, который имеет множество переменных, каждый раз измеряя время, затрачиваемое на различные виды деятельности, с прибл. 18 000 уникальных записей.

Мне нужно получить процент, который каждая из этих переменных вносит в общее количество затраченного времени. Я знаю, как это сделать, но не как заставить SAS сделать это.

Вот скриншот некоторых переменных вместе с итоговым показателем справа. Пожалуйста, дайте мне знать, если вам нужно что-нибудь еще.

Here is a screenshot of some of the variables

DomPazz и momo1644 предоставили полезные решения, которые способствуют моему пониманию SAS. Тем не менее, оба решения предусматривали последовательное выполнение этого, предполагая, что мне неясно, чего я на самом деле пытаюсь достичь. Я пытаюсь получить сумму для каждой из переменных, а затем найти процент, который эта сумма вносит в общую сумму. Если бы я делал это «вручную», это было бы v1_total / total-total * 100 / 1.

1 Ответ

0 голосов
/ 10 мая 2018

Вам необходимо вычислить итоговое значение строки, рассчитать итоговые значения всех столбцов, а затем указать процент. Предыдущие ответы вычисляли только итоги строк.

SAS код:

data have;
input surfm wskim Outdoorm dancem fishm snkrm tenpm Leisurem totadmin;
datalines;
0 0 0 0 0 0 0 0 180
0 0 0 0 0 0 0 0 180
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 98.75
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 30
0 0 0 0 0 0 0 0 30
0 0 0 0 120 0 0 120 750
0 0 0 0 0 0 0 0 30
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 1291.25
0 0 0 0 0 0 0 0 370
0 0 0 15 0 0 0 15 160
;
RUN;
/*Calculate Total time per Row*/
data row_totals;
set have;
total= surfm + wskim + Outdoorm + dancem + fishm + snkrm + tenpm + Leisurem + totadmin;
run;
/*Calcualte Percentages*/
proc sql;
create table want as
select
sum(surfm)/sum(total) format=percent10.2 as surfm,
sum(wskim)/sum(total) format=percent10.2 as wskim,
sum(Outdoorm)/sum(total) format=percent10.2 as Outdoorm,
sum(dancem)/sum(total) format=percent10.2 as dancem,
sum(fishm)/sum(total) format=percent10.2 as fishm,
sum(snkrm)/sum(total) format=percent10.2 as snkrm,
sum(tenpm)/sum(total) format=percent10.2 as tenpm,
sum(Leisurem)/sum(total)   format=percent10.2 as Leisurem,
sum(totadmin)/sum(total) format=percent10.2 as totadmin,
sum(total) as total
from row_totals
;
quit;

Выход:

output

surfm=0.00% wskim=0.00% Outdoorm=0.00% dancem=0.44% fishm=3.54% snkrm=0.00% tenpm=0.00% Leisurem=3.98% totadmin=92.04% total=3390
...