2017-03-19 4 views
0

Ich bin neu in SAS, also entschuldige ich mich, wenn diese Frage zu einfach ist. Ich habe ausgiebig danach gesucht und mir ist nicht klar, wie es weitergehen soll.Initialisierung eines SAS DATA-Sets mit globalen Makrovariablen durch Inkrementierung

Ich versuche, einen neuen SAS-Datensatz mit einem Feature zu initialisieren, das den bereits vorhandenen Makrovariablen var1, ..., varN entspricht. Der Einfachheit halber sei angenommen, dass N im Erzeugungsprozess für diese Variablen bereits als Makrovariable definiert ist. Ich möchte etwas entlang der Linien des folgenden Codes tun, die nicht funktioniert:

%let var1 = 3; 
%let var2 = 2.5; 
%let var3 = 1; 
[...] 
%let varN = 2; 


Data ABC; 
    do i = 1 to &N; 
    x = var&i.; 
    end; 
run; 

Ich glaube, eines der Probleme ist, dass im Gegensatz% tun, die „i“ ist kein Makro-Variablen. Ich habe versucht Varianten auf cat (var, i), aber es hat nicht das gewünschte Verhalten, da ich & var & ich lösen möchte. Gibt es eine Möglichkeit, dies in einem DATA-Schritt zu machen?

Antwort

3

Ich kann mir nicht vorstellen, eine Situation, in der das ist eigentlich eine gute Idee, dennoch, hier ist eine Antwort. Sie können die Standard-Makrovariable & & var & nicht verwenden, weil Sie dann eine% DO-Schleife benötigen. Um es in einem Datenschritt zu behalten, verwenden Sie SYMGET.

%let var1=1; 
%let var2=2; 
%let var3=3; 
%let N=3; 

Data ABC; 
    do i=1 to &N; 
     x = symget(catt('var', i)); *character value; 
     y = symgetN(catt('var', i)); *numeric value; 
     output; 
    end; 
run; 

proc print data=abc; 
run; 
+0

Vielen Dank, @Reeza. Könnten Sie mir erklären, warum das keine gute Idee wäre? Was wäre ein besserer Ansatz? – Lepidopterist

+1

symgetN - X sollte numerisch richtig sein –

+0

Dank @data_null_, habe ich die Änderungen vorgenommen. – Reeza

Verwandte Themen