У меня есть столбец с некоторыми нежелательными данными «XX» и я хочу установить их равными 0. В противном случае, оставьте данные столбца без изменений. Что-то похожее на, если columnA = "XX", то 0 Else columnA. Я попытался сделать это с помощью шага proc SQL SAS, но это не сработало. Поэтому ищем наиболее эффективный способ использования SAS SQL. Спасибо за любую помощь.

if columnA = "XX" then 0 
Else columnA
End as columnA
0
BlueBob 2 Май 2019 в 23:19

3 ответа

Лучший ответ

Это оператор CASE в SQL.

Case when columnA='XX' then '0'
     else columnA 
end as ColumnA_New

Оригинальный код: случай, когда columnA = 'XX', тогда 0 else columnA заканчивается как ColumnA

0
Reeza 3 Май 2019 в 02:28

Это должно работать в proc sql:

proc sql;
    select (case when columnA = 'xx' then '0' else columnA end) as columnA
    from t;

Обратите внимание, что 0 является строкой в этом выражении. columnA представляется строкой (на основании сравнения). Выражение case возвращает значение с указанным типом - и в этом случае оно должно быть строкой.

2
Gordon Linoff 2 Май 2019 в 21:14

Оба предыдущих решения работают и в порядке. Действительно, решение было задано в proc sql , но я считаю, что пошаговый подход к данным кажется более простым. Выкладываю это здесь ради полноты.

/*Generate sample data*/
data begin; 
  input value @@; 
  cards; 
1 2  3  2.5 1.7 3 34 33 33 33.7 34 34
  ; run;

/*replace value=33 with zeros*/
data wanted; 
  set begin; 
    if value = 33 then value=0; 
run;
0
pinegulf 3 Май 2019 в 06:07