2016-02-16 2 views
0

У меня есть следующий код:прок Tabulate недостающих значений SAS

ods tagsets.excelxp file = 'G:\CPS\myworkwithoutmissing.xml' 
style = printer; 
proc tabulate data = final; 
Class Year Self_Emp_Inc Self_Emp_Uninc Self_Emp Multi_Job P_Occupation Full_Part_Time_Status; 
table Year, P_Occupation*n; 
table Year, (P_Occupation*Self_Emp_Inc)*n; 
table Year, (Self_Emp_Inc*P_Occupation)*n; 
run; 
ods tagsets.excelxp close; 

Когда я запускаю этот код, я получаю следующее сообщение об ошибке:

WARNING: A class, frequency, or weight variable is missing on every observation. 
WARNING: A class, frequency, or weight variable is missing on every observation. 
WARNING: A class, frequency, or weight variable is missing on every observation. 

Теперь для того, чтобы обойти эту проблему, я добавьте опцию «отсутствует» в конце инструкции класса так, что:

class year self_emp_inc ....... Full_Part_Time_Status/ missing; 

Это устраняет проблему в том, что она не дает мне сообщение об ошибке и создает таблицу. Однако в моей диаграмме также подсчитывается количество отсутствующих значений, чего я не хочу. Например, моя переменная self_emp_inc имеет значения 1 и. (Для отсутствия). Теперь, когда я запускаю код с отсутствующим параметром, я получаю счет P_Occupation для всех отсутствующих значений, но мне нужен только счет, когда значение self_emp_Inc равно 1. Как я могу выполнить эту задачу?

+0

Я не могу попробовать это, поэтому я прокомментирую сейчас. Вы можете иметь несколько инструкций CLASS и упускать только значения, представляющие интерес. Вы также можете использовать инструкцию WHERE для ограничения вашего анализа. – Reeza

+0

Я фактически использовал только «отсутствующую» опцию, чтобы проверить, устраняет ли это проблему. Я, несмотря на то, что proc по умолчанию игнорирует недостающие значения, но, похоже, это проблема в этом случае. Не знаю, почему. Я действительно хочу игнорировать недостающее значение во всех случаях и во всех переменных. – user2916331

+0

Proc табулировать исключает случай listwise. Любые перечисленные переменные, имеющие недостающее значение, заставляют наблюдение исключать из всего анализа. – Reeza

ответ

1

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

Настоящая проблема заключается не в том, что у вас есть пропуски - в таблице 1x1 (1 var на 1 var), за исключением пропусков - это то, что вы хотите. Это связано с тем, что вы вызываете несколько таблиц, и на каждую таблицу влияют пропуски в переменных класса в другой таблице.

Как таковой, часто самый простой ответ - просто разбить таблицы на несколько операторов proc tabulate. Иногда это может быть слишком сложным или слишком обременительным с точки зрения времени выполнения, но я подозреваю, что в большинстве случаев это лучшее решение - это часто для меня, во всяком случае.

Поскольку вы работаете только с n, вместо этого вы можете построить табуляцию с пропущенными сообщениями, вывести их на набор данных, затем отфильтровать их и перепечатать или экспортировать этот набор данных. Это самое простое решение, как правило.

Как именно вы хотите это сделать, конечно, зависит от того, что именно вы хотите. Например:

data test_cars; 
    set sashelp.cars; 
    if _n_=5 then call missing(make); 
    if _n_=7 then call missing(model); 
    if _n_=10 then call missing(type); 
    if _n_=13 then call missing(origin); 
run; 

proc tabulate data=test_cars out=test_tabulate(rename=n=count); 
    class make model type origin/missing; 
    tables (make model type),origin*n; 
run; 

data test_tabulate_want; 
    set test_tabulate; 
    if cmiss(of make model type origin)>2 then delete; 
    length colvar $200; 
    colvar = coalescec(of make model type); 
run; 

proc tabulate data=test_tabulate_want missing; 
    class colvar origin/order=data; 
    var count; 
    tables colvar,origin*count*sum; 
run; 

Это не является совершенным, хотя это может быть сделано намного лучше, немного поработав на форматирование - это просто быстрый пример.

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

+0

Большое спасибо Джо. К сожалению, мне приходится вычислять проценты.Но это дает мне некоторые другие идеи. Очень признателен! – user2916331

Смежные вопросы