2013-06-01 31 views
6

Jak zastąpić wszystkie brakujące wartości zerami w SAS? Mam plik tekstowy, który zrzucam do SAS, aby przetworzyć niektóre dane geograficzne, ale gdy tylko ma brakującą wartość, przerywa operacje. Czy istnieje sposób na zmianę tego bez określania każdego pola? Mam ponad 200.Zastąp brakujące wartości w SAS

Sposób, w jaki to zrobić jest:

data geo_cali_north; 
set geo_cali_north; 
if polar_data eq . then 0; 
if lat_xvar eq . then 0; 
run; 

Jak można uniknąć w ten sposób dla każdego pola?

Odpowiedz

16

Można ustawić wszystkie brakujące wartości do 0 z tak: „”.

data myData; 
set myData; 
array a(*) _numeric_; 
do i=1 to dim(a); 
if a(i) = . then a(i) = 0; 
end; 
drop i; 

To będzie konwertować dowolny numeryczny do 0

+0

To działa świetnie! Dziękuję Ci! –

+1

nie ma problemu :) jeśli uznasz to za przydatne, rozważ wstawienie i zaakceptowanie tego pytania, aby było przydatne dla innych użytkowników. – isJustMe

+2

Proponuję drobną modyfikację; zamiast 'if (i) -....' lepszym rozwiązaniem jest 'a [i] = koalesce (a [i], 0);'; to będzie działać na specjalne misje (.A .B .Z itp.) dodatkowo. brakujący. (Funkcja MISSING również to zrobiłaby, wydaje mi się, że jest to nieco szybsze). Coalesce zwraca pierwszą niewychodzącą wartość z listy wartości. – Joe

7

Kolejna opcja:

proc stdize data=mydata reponly missing=0 out=newdata; 
var _numeric_; 
run; 

Jeśli masz SAS/STAT, prawdopodobnie szybciej niż opcja datastep dla dużych zbiorów danych.

+0

Nie działa, jeśli brakuje wszystkich wartości w tej kolumnie. – Lovnlust