Включить столбец «все» при ограничении оператора where

Извините, если на этот вопрос был дан ответ, я искал, но мне было очень трудно получить что-то близкое к правильному. Итак, в proc tabulate я продолжаю сталкиваться с проблемой, когда хочу иметь возможность создавать таблицы со столбцом Total, но это, очевидно, немного сложнее. Например, допустим, мне нужно создать таблицу с соответствующими столбцами статистики для участников из Аризоны, а затем столбцы статистики для всех участников. Если я ограничу оператор where следующим образом: State = Arizona, очевидно, что итоговый столбец (с использованием All) будет фактически включать только участников из Аризоны, а это не то, что мне нужно. Обходной путь для меньшего количества таблиц состоит в том, чтобы создать одну неограниченную таблицу, а затем одну ограниченную, а затем скопировать и вставить, но на самом деле это не то, что я хочу делать, когда у меня есть 90 наборов таблиц, по одному набору для каждого состояния. .

Единственное, что приходит мне в голову, это создать какую-то фиктивную переменную, но я не уверен, как это сделать.

РЕДАКТИРОВАТЬ: Желаемая таблица (в этом конкретном случае я ищу помощь, я думаю, это не столбец, но если решение в конечном итоге работает только для столбца, я, вероятно, мог бы реструктурировать свою таблицу). В конечном итоге я хочу, чтобы он создал один файл для каждого штата, и в каждом файле каждый из вопросов разбивается по отдельности, показывая общее количество по всем штатам и общее количество по штатам. У меня есть макрос для этого. Требуемый стол


sas
person eee333    schedule 07.10.2016    source источник
comment
Предложите вам составить небольшой объем выборочных данных и добавить их к вашему вопросу с примером желаемой выходной таблицы.   -  person Quentin    schedule 08.10.2016
comment
Спасибо, добавил! @Квентин   -  person eee333    schedule 10.10.2016


Ответы (1)


Рассмотрим решение SQL, в котором вы используете подзапрос производной таблицы, чтобы включить агрегацию данных Все в новые столбцы. В частности, вы будете перекрестно соединять запрос All с запросом State, так как ключи соединения не используются. А поскольку общий совокупный запрос выдает только скалярные значения, он будет повторяться для каждой строки.

Пример данных

* ID    Participant     Score   State
* 1     Angela Andrews  415     Arizona
* 2     Brandon Baker   813     Arizona
* 3     Charlene Clark  323     Arizona
* 4     David Douglas   689     Illinois
* 5     Erin Ellis      501     Illinois
* 6     Frank Fillmore  739     Illinois

SAS код

Примечание. агрегированные функции используется для столбцов Все во внешнем основном запросе, взаимозаменяемы, так как только одно значение обрабатывается в Max(Val) = Min(Val) = Mean(Val) ... -разнообразии, включенном для иллюстрации:

proc sql;
    CREATE TABLE newdata AS
    SELECT data.State, 
           COUNT(data.Score) As StateCount,
           SUM(data.Score) As StateTotal,
           MEAN(data.Score) As StateMean,
           MEDIAN(data.Score) As StateMedian,       
           STD(data.Score) As StateSteDev,
           VAR(data.Score) As StateVariance,

           MAX(total.AllCount) As AllCount,
           MIN(total.AllTotal) As AllTotal,
           MEAN(total.AllMean) As AllMean,
           MEDIAN(total.AllMedian) As AllMedian,
           MAX(total.AllMedian) As AllSteDev,
           AVG(total.AllVariance) As AllVariance       
    FROM data, 
        (SELECT COUNT(data.Score) As AllCount,
                SUM(data.Score) As AllTotal,
                MEAN(data.Score) As AllMean,
                MEDIAN(data.Score) As AllMedian,       
                STD(data.Score) As AllSteDev,
                VAR(data.Score) As AllVariance 
         FROM data sub) As total
    GROUP BY data.State;
 quit;

Также вы всегда можете ограничить внешний основной запрос с помощью предложения WHERE: WHERE data.State = 'Arizona'

Вывод

Obs State    StateCount StateTotal StateMean StateMedian StateSteDev StateVariance AllCount AllTotal AllMean AllMedian AllSteDev AllVariance 
1   Arizona  3          1551       517       415         260.438     67828         6        3480     580      595      595       38193.2 
2   Illinois 3          1929       643       689         125.491     15748         6        3480     580      595      595       38193.2 
person Parfait    schedule 08.10.2016
comment
Я запутался - откуда берутся данные из общего набора данных? - person eee333; 14.10.2016
comment
Итого — это имя производной таблицы (вложенный SELECT запрос, заключенный в круглые скобки). Обратите внимание, как она отделена запятой от таблицы data. Это разделенное запятой является неявным перекрестным соединением. - person Parfait; 14.10.2016