2013-05-17 1 views
0

Как применить инструкцию if к большому числу переменных без необходимости переписывать условие. Например, предположим, что у меня есть набор переменных пола, возраста, высоты ... (около 60 переменных), и я хочу указать условиеРекурсивная команда по переменным в SAS

if sex =. то секс = -99; если возраст =. затем возраст = -99; . . . Все 60 переменных, которые присутствуют в наборе данных. Есть ли быстрый способ сделать это?

Thanks

+0

Используйте массив и цикл 'for'. – Blazemonger

+0

У SAS нет 'for', это' do' loop;) – Joe

+0

Кроме того, я был очень разочарован, чтобы открыть этот поток, а не найти причину для написания фактически рекурсивного макроса или подпрограммы FCMP ... – Joe

ответ

2

Используйте массив.

array arr{60} sex age height .... ; 

do i = 1 to 60; 
    if arr{i} = . then arr{i} = -99; 
end; 

Это, пожалуйста, подумайте над тем, следует ли перекодировать отсутствующие значения таким образом, что вы хотите сделать. Большинство процедур SAS знают о недостающих значениях и могут обрабатывать их разумным образом; превращение их в числовое значение может укусить вас сзади. Например, если вы попытаетесь рассчитать сумму или значение с помощью PROC SUMMARY, ваш результат больше не будет иметь смысла; Аналогичным образом, если вы попытаетесь проанализировать свои данные, используя статистическую процедуру.

+1

'array arr _numeric_; 'кажется правильным, если вы хотите сделать все из них (как кажется плакат). – Joe

1

В дополнение к ответу Hongi Ooi, если вы хотите сделать это для всех переменных в вашем наборе данных (это звучит так, как вы) и не хотите вводить их, вы можете получить SAS для предоставления вы со списком переменных для подачи в ваш массив.

Пример:

%macro getvars(dsn); 
%global vlist; 
proc sql; 
    select name into :vlist separated by ' ' 
    from dictionary.columns 
    where memname=upcase("&dsn"); 
quit; 
%mend; 

Вот ссылка на этот и другие примеры: How to read variable names in a SAS data set?

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

E.G. если отсутствует (var), то делать;

+0

Было бы неплохо включить в свой ответ соответствующую часть кода из ссылки здесь; в то время как включая ссылку для подробностей и/или выходящую за пределы ответа, ответы в SO обычно должны быть самозаполнены без ссылки на другие веб-сайты. (http://meta.stackexchange.com/questions/8231/are-answers-that-just-contain-links-elsewhere-really-good-answers для получения дополнительной информации.) – Joe

0
data have; 
input x y z a b; 
datalines; 
1 2 3 . 5 
4 5 . 1 2 
4 3 . . 1 
;;;; 
run; 

proc stdize data=have out=want reponly missing=-99; 
run; 

Если вы действительно хотите сделать все (или перечислите те, которые вы хотите сделать). STDIZE является частью SAS/STAT, поэтому, надеюсь, у вас это есть.

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