2016-11-07 6 views
1

mein Zweck ist ziemlich einfach. Ich möchte nur einige Werte für Datensätze angeben. Es gibt 2 Schritte. Zuerst werden die Werte in Makrovariablen gelesen. Als zweites übergeben Sie die Makrovariablen an das Dataset. Die Codes lauten:Makro Variable kann nicht richtig gelesen werden

Zuerst Makrovariablen erstellen.

proc sql; 
select procdate, prim,side,orgnname,orgnid,OrgnStTe into :procdate, :prim, :side, :orgnname, :orgnid, :OrgnStTe from ours 
where objid=783125; 
quit; 

Dieser Schritt funktioniert gut. Übergeben Sie dann die Werte.

data test; 
set m1; 
if id=184 then DO; 
objid=783125;procdate=&procdate.;prim=&prim.;side=&side.;orgnname=&orgnname.;orgnid=&orgnid.;OrgnStTe=&OrgnStTe.; 
END; 
run; 

Bei diesem Schritt handelt es sich um den Fehler orgnname. Nicht ganz sicher über den Fehler. Ich probierte% bquote (& orgnname.) Und% str (& orgnname.). Beide arbeiteten nicht.

HINWEIS: Zeile, die von der Makrovariablen "ORGNNAME" generiert wird. 1 CALVARY JOHN JAMES MEMORIAL KRANKENHAUS ---- ERROR 388-185: Erwartet einen arithmetischen Operator.

Fehler 76-322: Syntaxfehler, Anweisung wird ignoriert.

Antwort

2

Wenn Sie die Makrovariable erweitern, muss der resultierende Code gültige SAS-Syntax sein. Wenn Sie in einem String-Literal referenzieren möchten, muss der Wert in Anführungszeichen stehen.

ORGNNAME = "1 CALVARY JOHN JAMES MEMORIAL HOSPITAL"; 

So zu tun, dass mit dem Makrovariablen die Syntax wie folgt aussehen würde:

ORGNNAME = "&ORGNAME"; 

Aber in Wirklichkeit mit Makrovariablen Werte zu übertragen, die bereits in Datensätzen sind nicht sinnvoll. Es erfordert zu viel Arbeit und ist anfällig für Fehler oder Wertabschneiden. Warum nicht einfach die Daten aus dem Datensatz lesen?

data test; 
    set m1; 
    if id=184 then DO; 
    set ours (where=(objid=783125) keep=objid procdate prim side orgnname orgnid OrgnStTe); 
    end; 
run; 
Verwandte Themen