2013-03-23 10 views
6

Ich habe derzeit einen Datensatz mit 200 Variablen. Aus diesen Variablen habe ich 100 neue Variablen erstellt. Jetzt möchte ich die ursprünglichen 200 Variablen fallen lassen. Wie kann ich das machen?Lassen Sie einen Bereich von Variablen in SAS

Etwas besser wäre, wie ich Variablen 3-200 in den neuen Datensatz fallen lassen kann.

Entschuldigung, wenn ich in meiner Frage vage war, aber im Grunde habe ich herausgefunden, dass ich -. Wenn meine erste Variable zuerst aufgerufen wird und meine letzte Variable zuletzt aufgerufen wird, kann ich alle dazwischen liegenden Variablen löschen (drop = first - last);

Vielen Dank für alle Antworten.

Antwort

5

Wie bei den meisten SAS-Aufgaben gibt es mehrere Alternativen. Der einfachste und sicherste Weg, Variablen aus einem SAS-Datensatz zu löschen, ist PROC SQL. Liste einfach die Variablen mit Namen, durch ein Komma getrennt:

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

Ändern der Tabelle mit PROC SQL entfernt die Variablen aus den an Ort und Stelle gesetzt Daten.

Eine andere Technik ist der Datensatz mit einer DROPOption neu zu erstellen:

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

Und noch eine andere Art und Weise unter Verwendung einer DROPAnweisung:

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

natürlich, wenn Sie weniger Variablen, die Sie * halten zu wollen * als * drop *, und Sie wollen eine dieser Techniken verwenden, wo Sie sie explizit im Code nennen müssen, würden Sie wollen Verwenden Sie stattdessen einen "KEEP". – sasfrog

3

Viele Optionen - einige "sicherer", weniger sicher, aber einfacher zu programmieren. Stellen wir uns vor, Sie haben ein Dataset mit den Variablen ID, PLNT und x1-x200, um damit zu beginnen.

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; 

* Oder, mach es so. Dies würde auch mit SQL ALTER TABLE funktionieren. Dies ist der sicherste Weg, es zu tun.

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

Danke, das war es genau. – sujinge9

+1

Ich dachte nicht, dass Sie Variablen in PROC DATASETS löschen könnten, diese Prozedur wird normalerweise verwendet, um den Deskriptorabschnitt eines Datasets zu ändern. Gab es eine Änderung in einer späteren Version von SAS? – Longfish

+2

@Keith Sie haben Recht; Man kann Variablen nicht mit PROC DATASETS löschen. – BellevueBob

1

Wenn alle Variablen Sie Namen löschen wollen, so dass sie alle gleich beginnen (wie old_var_1, old_var_2, ..., old_var_n), könnten Sie dies tun (der Doppelpunkt in Drop-Option beachten):

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

+1 für SAS-Platzhalter. Hat mich vor dem Posten gerettet! – user667489

Verwandte Themen