Как взвесить проценты с помощью proc tabulate? - PullRequest
0 голосов
/ 14 ноября 2018

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

Я включил пример набора данных и то, что я пробовал до сих пор:

Data have; 
input gender wgt q1 year;
lines;
0  1.5  0  2014
0  1    1  2014
0  1.5  1  2014
0  1    1  2014
0  1.5  0  2014
1  1    1  2014
1  1    1  2014
1  1    1  2014
1  1    0  2014
1  1   1  2014
1  1    1  2014
;
run;

Proc format;
  value gender  0="boy";
                1= "girl";
  value q1f     0= "No"
                1="Yes";
run;

Proc tabulate data=have;
class gender q1 year;
weight wgt;
table gender*pctn<q1>, year*q1;
format gender gender. q1 q1f.;
run;

Я знаю, что результатом должно быть это приложение. 46,2% мальчиков ответили «нет» и ок. 53,8% ответили «да», когда я включу веса, но результаты из таблицы процедур дают мне 40% «нет» и 60% «да» среди мальчиков. Что я сделал не так?

1 Ответ

0 голосов
/ 14 ноября 2018

Оператор WEIGHT влияет на VAR значения переменных, а не на число NPCT<N> - это процент отсчетов.Оператор 'FREQ' будет влиять на число N, вызывая внутреннее повторение точки данных на основе другой переменной, однако FREQ не работает с дробными повторениями (значениями) и округляется в меньшую сторону.

Из подсказок

переменная FREQ;

указывает числовую переменную, значение которой представляет частоту наблюдения.Если вы используете оператор FREQ, то процедура предполагает, что каждое наблюдение представляет n наблюдений, где n - значение переменной.Если n не является целым числом, то SAS его усекает.Если n меньше 1 или отсутствует, то процедура не использует это наблюдение для вычисления статистики.

Сумма частотной переменной представляет собой общее количество наблюдений.

Переменная WEIGHT;

указывает числовую переменную, значения которой взвешивают значения переменных анализа .Значения переменной не обязательно должны быть целыми числами.PROC TABULATE реагирует на значения веса в соответствии со следующей таблицей.

Значение веса: PROC TABULATE Response

  • 0: подсчитывает наблюдение в общем количестве наблюдений
  • <0: преобразует значение в ноль и подсчитывает наблюдениев общем количестве наблюдений </li>
  • .: Исключает наблюдение

Если вы хотите использовать вес для подсчетов, подобных pctN, создайте переменную unity, которая должна быть взвешена, и PCTSUM

Data have; 
input gender wgt q1 year;
unity = 1;
lines;
0  1.5  0  2014
0  1    1  2014
0  1.5  1  2014
0  1    1  2014
0  1.5  0  2014
1  1    1  2014
1  1    1  2014
1  1    1  2014
1  1    0  2014
1  1    1  2014
1  1    1  2014
;
run;

Proc tabulate data=have;
  title "Unity weighted";
  class gender q1 year;
  format gender gender. q1 q1f.;

  var unity;  %* <----------;
  weight wgt;

  table gender*unity, year*q1;  %* <---- debug, the count 'basis' for PCTSUM<q1> ;

  table gender*unity*(pctsum<q1>), year*q1;  %* <--- weighted unity PCTSUM;
run;
...