Нулевые столбцы только на основе значения переменной - набор данных SAS

У меня очень большой набор данных SAS с более чем 280 переменными, и мне нужно получить все полные столбцы NULL на основе значения переменной. Например, в этом наборе данных у меня есть переменная с именем «Отмечено» (только со значениями «Да» и «Нет»), и я хочу узнать на основе значения «Нет» все полные пустые столбцы в этом наборе данных.

Есть ли какой-нибудь быстрый способ узнать это, не записывая все имена столбцов для полных значений NULL?

Так, например, если у меня есть 4 переменной в таблице,

введите описание изображения здесь

Итак, на основе приведенной выше таблицы я хотел бы видеть такой вывод, где Var4 = 'No' и возвращать только столбцы со всеми недостающими значениями.

введите описание изображения здесь

Это помогло бы мне определить переменные, которые вообще не заполняются, если значение Var4 равно «Нет».


person LondonUK    schedule 16.08.2019    source источник
comment
Ваш вопрос сбивает с толку. Вы хотите проверить значения NULL (или, в терминологии SAS, MISSING values) или значения 'No'?   -  person Tom    schedule 16.08.2019
comment
да, я хочу, чтобы все переменные с ОТСУТСТВУЮЩИМИ значениями основывались только на сообщенном значении переменной «Нет»   -  person LondonUK    schedule 16.08.2019
comment
Все еще не ясно. Вы говорите, что ИМЯ проверяемой переменной - НЕТ? Если да, то зачем упоминать, что существует 280 переменных? Опубликуйте небольшой пример (всего с 2 или 3 переменными, а не с 280 переменными) и ожидаемый результат для этого примера.   -  person Tom    schedule 16.08.2019
comment
Я обновил исходный вопрос примером. Спасибо   -  person LondonUK    schedule 16.08.2019
comment
Итак, теперь похоже, что вы хотите найти НАБЛЮДЕНИЯ, а не ПЕРЕМЕННЫЕ. Вам нужны наблюдения с VAR4 = 'No' и отсутствующими значениями для всех других столбцов.   -  person Tom    schedule 16.08.2019


Ответы (2)


Думаю, вопрос состоит из двух частей. Во-первых, это подмножество записей, где Reported = "N". Затем среди этих записей столбцы отчета, в которых есть все пропущенные значения. Если это верно, вы можете сделать что-то следующее (я предполагаю, что все столбцы с пропущенными значениями являются числовыми. Если нет, этот подход потребует небольшой модификации):

/* Thanks to REEZA for pointing out this way of getting the freqs. This eliminates some constraints and is more efficient */
proc freq data=have nlevels ;
  where var1 = "N" ;
  ods output nlevels = freqs;
  table _all_;
run;

proc sql noprint;
  select TableVar into :cols separated by " " from freqs where NNonMissLevels = 0 ;
  quit;

%put &cols;


data want;
  set have (keep = &cols var1);
  where var1 = "N" ;
run;
person SAS2Python    schedule 16.08.2019
comment
Вы должны использовать nlevels с proc freq, чтобы определить количество пропущенных. community.sas.com/t5/SAS-Programming/ - person Reeza; 16.08.2019
comment
Спасибо. Я выбрал средства как один из способов сделать это. Использование NLEVELS также может устранить ограничение на числовые переменные. Обновлено решение, чтобы отразить это - person SAS2Python; 16.08.2019

Обратите внимание на оператор WHERE в PROC FREQ.

proc format;
   value $_xmiss_(default=1 min=1 max=1) ' '  =' ' other='1';
   value  _xmiss_(default=1 min=1 max=1) ._-.Z=' ' other='1';
   quit;

%let data=sashelp.heart;


proc freq data=&data nlevels;
   where status eq: 'A';
   ods select nlevels;
   ods output nlevels=nlevels;
   format _character_ $_xmiss_. _numeric_ _xmiss_.;
   run;

data nlevels;
   length TABLEVAR $32 TABLEVARLABEL $128 NLEVELS NMISSLEVELS NNONMISSLEVELS 8;
   retain NLEVELS NMISSLEVELS NNONMISSLEVELS 0;
   set nlevels;
   run;
person data _null_    schedule 16.08.2019