2016-04-13 2 views
0

У меня есть набор данных, который содержит 100 столбцов. Каждый раз, когда у него будут некоторые недостающие значения для некоторых столбцов (все значения столбцов отсутствуют). Места фиксированы, поэтому я не могу указать их по столбцу A = ColumnB.SAS, заменить отсутствующие значения столбца значениями столбцов справа

Что я хочу сделать, это заменить все недостающие значения столбцов значениями столбцов из столбца с правой стороны (см. Тестовые данные). Спасибо.

DATA have ; 
LENGTH make $ 20 ; 
INPUT make $ 1-17 a b c d m h u; 
CARDS; 
AMC Concord  4099 22 . 2 1 . 22 
AMC Pacer   4749 17 . 2 1 . 17 
Audi 5000   9690 17 . 3 23 . 17 
Audi Fox   6295 23 . 1 32 . 23 
; 
RUN; 

DATA want; 
LENGTH make $ 20 ; 
INPUT make $ 1-17 a b c d m h u; 
CARDS; 
AMC Concord  4099 22 2 2 1 22 22 
AMC Pacer   4749 17 2 2 1 17 17 
Audi 5000   9690 17 3 3 23 17 17 
Audi Fox   6295 23 1 1 32 23 23; 
RUN; 
+0

Что вы имеете в виду под "расположение фиксированы? Вам нужно, чтобы это работало, не зная названия столбцов? Что вы хотите сделать, если два или более последовательных столбца имеют отсутствующие значения? – user667489

+0

Это тот случай, когда каждый раз, когда отсутствует значение, которое вы хотите заменить, значение «следующей» переменной (следующая является позицией/varnum)? Являются ли все переменные числовыми, как в вашем примере? Если это так, вы можете использовать массив. Но это странное требование. Я не могу думать о времени, когда полезно иметь две переменные с одинаковыми значениями. – Quentin

+0

667489 - это означает, что на этот раз значение col 34 не имеет значений, в следующий раз col 76 имеет отсутствующие значения. Если два или более последовательных столбца отсутствуют, в настоящее время мы не сталкиваемся с этой ситуацией, поэтому я не знаю ответа. Надеюсь, в то время я могу пересмотреть пример кода, приведенный здесь. – user1481397

ответ

2

Предполагая, что вы не можете иметь безвестно отсутствующим всей колонны неведения:

data want; 
set have; 
array vars(*) a -- u; 

do i = 1 to dim(vars)-1; 
if vars(i) = . then vars(i)=vars(i+1); 
end; 

run; 
+0

Согласитесь с подходом, но это заменяет отсутствующие значения переменной влево, «vars (i-1)». OP хочет переменную вправо, 'vars (i + 1)'. – Quentin

+0

Будет ли это шокировать вас, чтобы знать, что я должен иметь пространственный смысл? – Reeza

+0

Не думал бы, что это будет большой проблемой для большинства вещей SAS. Названия Var более полезны, чем относительные местоположения. :) – Quentin

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