2016-11-04 3 views
0

Ich habe zwei Arrays und ich möchte eine der anderen Bedingungen machen. ARRAY1 enthält binäre Flags (0 oder 1) und ich möchte das zweite Array leer lassen, wenn der Inhalt in ARRAY1 [i] 0 ist. ARRAY1 und ARRAY2 haben dieselbe Anzahl von Elementen.Mehrere dynamische Array mit bedingten in SAS

data test; 

set test_data; 

    array ARRAY1 &variable_flags; 

    array ARRAY2 $ &variable_list &variable_list_initial_values; 

    do i=1 to &variable_count; 

    if ARRAY1[i]=0 then ARRAY2[i]=""; 

    end; 

run; 

Mein Ausgang funktioniert, bis es in ARRAY [i] eine 0 trifft. Wenn dies geschieht, ist die Spalte nach Wörtern leer. Ich lande mit etwas wie dem Attach-Bild. Warum passiert dies?

enter image description here

+3

Veröffentlichen Sie Ihre Testdaten und Beispielausgabe als Text in der Frage. Bilder von Daten sind schwer in den Programmeditor einzufügen. – Tom

+0

Ich bin immer noch verwirrt. Vorschlagen hinzufügen Beispieleingabe. Und entfernen Sie das Makro-Zeug, nur um sich auf die Array-Frage zu konzentrieren. Sobald Sie es ohne Makro vars arbeiten, können Sie sie immer wieder hinzufügen. – Quentin

Antwort

0

Die Anfangswerte für ein Feld nur einmal eingestellt. Sie werden zu Beginn jeder Iteration des Datenschritts nicht erneut angewendet. Sie könnten Ihre Logik ändern, um ein anderes Array mit den Anfangswerten zu haben. Lass uns einige Testdaten machen.

data test_data; 
    input matt_flg @@ ; 
cards; 
1 1 0 0 1 1 
; 

Nun wollen wir den Wert auf entweder den Standardwert oder leer auf dem Wert der FLAG Variable basiert.

%let variable_flags=matt_flg; 
%let variable_list=matt; 
%let variable_list_initial_values="MATT"; 
%let variable_count=%sysfunc(countw(&variable_list)); 
%let maxlength=20 ; 
data test; 
    set test_data; 
    array flags &variable_flags; 
    array vars $&maxlength. &variable_list ; 
    array default (&variable_count) $&maxlength. _temporary_ (&variable_list_initial_values); 
    do i=1 to dim(vars); 
    if flags(i) then vars(i)=default(i); 
    else vars(i)=' '; 
    end; 
run;