Альтернатива подходу PROC SUMMMARY при суммировании переменных по нескольким наблюдениям

Я имею дело с набором данных повторных измерений в широком формате. Каждое наблюдение представляет собой одно измерение для одного объекта, и каждый объект измеряется шесть раз. Данные содержат в основном фиктивные переменные.

Я хочу подсчитать уникальные значения фиктивных переменных по всем шести наблюдениям для каждого предмета.

Иметь:

 MeasurementNum    SubjectID    Dummy0    Dummy1    Dummy2    Dummy3   Dummy4         
-----------------------------------------------------------------------------   
            1          1          1          1         0         0         0
            2          1          0          1         0         1         0
            3          1          -          -         -         -         -
            4          1          0          0         1         1         0
            5          1          -          -         -         -         -
            6          1          0          0         0         1         0
            1          2          1          0         0         1         0
            2          2          0          0         0         0         0  
            3          2          0          1         0         0         0
            4          2          1          1         0         1         0
            5          2          -          -         -         -         -  
            6          2          1          1         1         0         0  

Хотеть:

                                       Total for       Overall
 MeasurementNum    SubjectID    ...    MeasurementNUM  Total      
--------------------------------...-----------------------------  
            1          1        ...          2         4                  
            2          1        ...          2         4                  
            3          1        ...          -         4                  
            4          1        ...          2         4                 
            5          1        ...          -         4                
            6          1        ...          1         4                  
            1          2        ...          2         4                  
            2          2        ...          0         4                    
            3          2        ...          1         4                  
            4          2        ...          3         4                  
            5          2        ...          -         4                    
            6          2        ...          3         4                                 

Мой текущий подход состоит в том, чтобы объединить все шесть строк в каждой теме в одну строку, сохраняющую значение 1, используя Proc MEANS с операторами BY и OUTPUT, как описано в этот связанный вопрос. Затем я использую Proc SUMMARY, чтобы получить значения, перечисленные в переменной Total в операторе have.

proc summary
data=have;
By SubjectID
class Dummy1-4;
output out=want sum=sum;  

Есть ли способ получить отдельные / уникальные подсчеты по наблюдениям без предварительной консолидации строк?

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


sas
person user10712739    schedule 23.01.2019    source источник
comment
ОПИСАНИЕ ПРОЦЕССА и СРЕДСТВА - это действительно одно и то же, и они взаимозаменяемы. Чтобы помочь, можете ли вы показать код, который действительно работает, и, возможно, упростите свои данные до минимального воспроизводимого примера с чем мы можем работать, показывая то, что вы ожидаете, в качестве результата? Мне интересно, не подходит ли вам статистика MAX.   -  person Reeza    schedule 23.01.2019
comment
Кажется, сейчас я не могу редактировать вопросы. Я разместил запрос в службу поддержки на мета-сайте. Как только проблема будет решена, отредактирую вопрос. На данный момент я могу сказать, что для каждого SubjectID я хотел бы произвести описательную информацию, сообщающую мне, сколько фиктивных переменных имели значение 1 по всем шести измерениям. Для ID1 это будет 1 (Dummy1). Для ID2 это будет 3 (Dummy 0, Dummy1 и Dummy99).   -  person user10712739    schedule 23.01.2019
comment
Почему SQL может упростить получение условных подсчетов?   -  person Tom    schedule 23.01.2019


Ответы (1)


Я подозреваю, что использование PROC SUMMARY (также известного как PROC MEANS) будет самым простым способом. Похоже, вы хотите найти МАКСИМАЛЬНОЕ значение для каждого ПРЕДМЕТА, а затем СУММИРОВАТЬ его, чтобы получить итоговые суммы.

proc summary data=have nway ;
  class SubjectID ;
  var Dummy0-Dummy999;
  output out=any(drop=_type_ _freq_) n=n_reps max= ;
run;

data want ;
  set any ;
  total = sum(of Dummy0-Dummy999) ;
run;

Не уверен, как SQL помогает с условным подсчетом. Но вы можете сгенерировать счетчики и итоги за один шаг с помощью PROC SQL, но для этого потребуется код обоев, подобный этому:

proc sql ;
  create table want as 
    select SubjectID
         , count(*) as n_reps
         , max(dummy0) as dummy0
         , max(dummy1) as dummy1
         ...
         , max(dummy999) as dumyy999
         , sum
         ( max(dummy0) 
         , max(dummy1) 
         ...
         , max(dummy999)
         ) as Total
    from have
    group by 1
  ;
quit;

Вероятно, вы могли бы определить макрос (или какой-либо другой инструмент) для генерации этого кода обоев для вас из списка имен переменных.

person Tom    schedule 23.01.2019