2013-03-23 16 views
6

Mam obecnie zbiór danych z 200 zmiennymi. Z tych zmiennych utworzyłem 100 nowych zmiennych. Teraz chciałbym upuścić oryginalne 200 zmiennych. Jak mogę to zrobić?Upuść zakres zmiennych w SAS

Nieco lepiej byłoby, jak mogę upuścić zmienne 3-200 w nowym zbiorze danych.

Przepraszam, jeśli byłem niejasny w moim pytaniu, ale w zasadzie zorientowałem się, że muszę użyć -. Jeśli moja pierwsza zmienna zostanie wywołana jako pierwsza, a moja ostatnia zmienna zostanie nazwana jako ostatnia, mogę usunąć wszystkie zmienne pomiędzy (drop = first - last);

Dzięki za wszystkie odpowiedzi.

Odpowiedz

5

Podobnie jak w przypadku większości zadań SAS, istnieje kilka alternatyw. Najłatwiejszym i najbezpieczniejszym sposobem upuszczania zmiennych z zestawu danych SAS jest użycie PROC SQL. Wystarczy wymienić zmienne według nazwy, oddzielając je przecinkami:

proc sql; 
    alter table MYSASDATA 
     drop name, age, address; 
quit; 

Zmiana tabelę z PROC SQL usuwa zmienne z danymi określonymi w miejscu.

Inną techniką jest odtworzenie zbioru danych za pomocą DROPopcję:

data have; 
    set have(drop=name age address); 
run; 

a jeszcze inny sposób stosuje DROPoświadczenie:

data have; 
    set have; 
    drop name age address; 
run; 
+1

oczywiście, jeśli masz mniej zmienne, które chcesz zachować * * * niż kropla * i chcesz skorzystać z jednej z tych technik, gdzie trzeba wyraźnie wymienić je w kodzie, którą chcesz zamiast tego użyj 'KEEP'. – sasfrog

3

wiele opcji - niektóre "bezpieczniejsze", niektóre mniej bezpieczne, ale łatwiejsze do kodowania. Wyobraźmy sobie, że masz na początku zestaw danych z identyfikatorami zmiennych, PLNT i x1-x200.

data have; 
id=0; 
plnt=0; 
array x[200]; 
do _t = 1 to dim(x); 
x[_t]=0; 
end; 
run; 

data want; 
set have; 
*... create new 100 variables ... ; 
*option 1: 
drop x1-x200; *this works when x1-x200 are numerically consecutive; 
*option 2: 
drop x1--x200; *this works when they are physically in order on the dataset - 
       only the first and last matter; 
run; 

* Lub zrób to w ten sposób. Będzie to również działać z SQL ALTER TABLE. To jest najbezpieczniejszy sposób to zrobić .;

proc sql; 
select name into :droplist separated by ' ' from dictionary.columns 
where libname='WORK' and memname='HAVE' and name not in ('ID','PRNT'); 
quit; 

proc datasets lib=work; 
modify want; 
drop &droplist.; 
quit; 
+0

Dzięki, to było dokładnie to. – sujinge9

+1

Nie sądziłem, że możesz upuścić zmienne w PROCETATACH PROC, procedura ta jest zwykle używana do zmiany części deskryptora zbioru danych. Czy nastąpiła zmiana w późniejszej wersji SAS? – Longfish

+2

@Keith Masz rację; nie można upuszczać zmiennych za pomocą PROC DATASETS. – BellevueBob

1

Jeśli wszystkie zmienne chcesz usunąć nazwane są tak wszyscy zaczną same (jak old_var_1, old_var_2, ..., old_var_n), można to (uwaga na dwukropek w opcji drop) zrobić:

data have; 
set have(drop= old_var:); 
run; 
+0

+1 dla dopasowywania symboli wieloznacznych SAS. Uratował mnie przed opublikowaniem tego! – user667489