Dieser Codeabschnitt wird nicht ordnungsgemäß ausgeführt, wenn in jeder Liste mehr als eine Sache vorhanden ist.So korrigieren Sie den SAS-Fehler über Positionsparameter Makrovariablen
%macro loop(list1, list2);
%let n=%sysfunc(countw(&list1));
%do i=1 %to &n;
%let O_list1 = %scan(&list1, &i, '');
%let O_list2 = %scan(&list2, &i, '');
data taxes;
food=3*&O_List1;
materials = 4*&O_List2
%end;
%mend;
%loop(1, 4);
/* %loop(1 3, 4 6) */
Hier ist der Ausgang 3 und 16. Wenn ich die Schleife machen, wie es in dem kommentierten Abschnitt ist der Code nicht läuft und ich kann nicht, warum scheinen, um herauszufinden. Vielen Dank!
Nicht auf Ihre Fehler im Zusammenhang, aber es ist eine gute Idee, eine 'läuft hinzuzufügen;' Anweisung Ihren DATA Schritt zu beenden. – Quentin
Da Sie% SCAN() angewiesen haben, dass Ihre Listen durch einfache Anführungszeichen getrennt sind, enthält Ihr Beispiel nur EINEN Eintrag in jeder Liste. Dies bedeutet, dass der in dieses Element eingebettete Speicherbereich dazu führt, dass Ihr Makro ungültigen SAS-Code generiert. Auch die Gesamtlogik des Makros ist fehlerhaft, da es immer dasselbe Ausgabe-Dataset überschreibt, wenn mehrere Elemente in der Liste vorhanden sind. Was ist das Gesamtziel des Makros? – Tom
@Tom Danke, dass ich darauf hingewiesen habe. Ich habe a_ & I hinzugefügt, um das Überschreibungsproblem zu beheben. Das Ziel des Programms in meinem realen Programm ist es, über zwei Listen gleichzeitig zu iterieren. Auf diese Weise kann ich einen Tisch bekommen, den ich brauche. Jetzt, da ich das herausgefunden habe, muss ich herausfinden, wie man alle erstellten Tabellen anfügt. –