2015-01-23 2 views
0

Я импортировал набор данных из excel и хочу запустить логистическую регрессию, но SAS не распознает непрерывные переменные. Вот код, который я использовал:SAS не распознает непрерывные переменные

Proc logistic data=work.heart class famhist /param=ref ref=first 
model chd = tobacco ldl typea age famhist; 
run; 

я получаю следующее сообщение в Log:

"Variable tobacco should be either numeric or specified in the CLASS statement" 

в то время как табак является непрерывной переменной. Что мне делать?

+1

Если у вас есть какие-либо символы, например. «NA», который попал туда, сначала исправьте их, а затем умножьте «табак» на 1. Или найдите подходящий способ сделать это в Stack Overflow. – Scortchi

+2

Умножение символьных переменных на 1 является злым и должно быть наказуемо суровой лекцией от вашего местного гуру SAS. ;) – Joe

+0

Неправильно указан ваш логический запрос proc. Вы можете просмотреть, как выполнить логистическую регрессию, ссылаясь на документацию/примеры SAS или учебник UCLA здесь: http://www.ats.ucla.edu/stat/sas/dae/logit.htm – Reeza

ответ

2

SAS, безусловно, понимает непрерывные переменные, хотя для них не существует дискретного типа способом r. SAS имеет числовые и характерные типы (и другие простые типы).

Однако при импорте из Excel SAS не обязательно сделает столбец, что вы думаете, что он должен. В частности, Excel не имеет понятия типа, как SAS; ячейка имеет тип, более или менее, но столбец может иметь все, что вы хотите. Очень часто SAS изменяет числовые символы на символ при импорте, потому что иначе он потеряет некоторые данные.

Как замечает Scortchi в комментариях, есть хорошие шансы, что это данные некоторых символов, такие как «NA» в вашем файле excel. Вы можете изменить это несколькими способами.

Вы можете изменить его после того, как тот факт, например, так:

data have_fixed; 
    set have(rename=tobacco=tobacco_c); 
    tobacco=input(tobacco_c,??best12.); *or whatever a reasonable informat is; 
run; 

?? говорит SAS не будет беспокоиться о тех, которые не преобразовывают аккуратно, просто сделать их не хватает (.). Если у вас есть какая-либо логика для обработки этого, выполните его (т. Е. Если у вас есть некоторые, которые вы хотите перевести на какое-то другое значение, сделайте это сначала).

Вы также можете указать SAS, как импортировать определенные переменные.

proc import file="c:\myfile.xlsx" out=have dbms=excel replace; 
    dbsopts="dbsastype=(tobacco='numeric')"; 
run; 
+0

Результат от 'табака = input (табак_c,? best12.); 'будет зависеть от формата чисел в Excel: для столбца, интерпретируемого как * символ *, Excel передаст визуальное представление. Q-ячейка со значением '0,007', отображаемая с числовым форматом' 0,00', будет считана как «0,01» ', поэтому оператор ввода приведет к' 0.01' –

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