2017-07-03 1 views
2

Ich habe einen SAS-Code durchsucht und die folgenden Möglichkeiten gefunden, eine Makrovariable zu referenzieren.Bezugnehmend auf eine bereits definierte Makrovariable

  1. & variable_name.
  2. & variable_name

Ich weiß, dass der erste Weg der Referenzierung ist die normale Art und Weise, wie wir auf eine definierte Makrovariablen in sas beziehen.

Aber, könnten Sie bitte erklären, wie die zweite Art und Weise tut (ohne Zeit nach dem Makrovariablenname) unterscheidet sich von der ersten Art und Weise

+0

Beachten Sie, dass dies Makrovariable Referenzen sind. Um auf eine Variable zu verweisen, verwenden Sie einfach ihren Namen. – Tom

Antwort

1

Es ist der kurze Weg, um eine Variable zu verweisen. Allerdings macht es einen Unterschied, wenn der Ausgang verketten:

%let var = My name ; 

%put &var.is Paul; 
// Output: My name is Paul. 

%put &varis Paul; 
// Output: WARNING: Apparent symbolic reference VARIS not resolved. 
// &varis Paul 

Ein weiteres Beispiel, in dem Sie auf jeden Fall einen . benötigen:

%let lib = sashelp; 
data temp; 
    set &lib..class; 
run; 

würde ich empfehlen, immer die Variante &variable. zu verwenden. Weil es klar ist, wo die Variable endet.

+0

Vielen Dank @zuluk. Ich versuchte, über das Internet zu suchen, aber konnte diesen Unterschied nicht finden – ethan

+0

Sie müssen mit dem Begriff "Makrovariable Periode" suchen, die nur "Variable" sucht, würde nichts zurückbringen, weil eine Variable von einer Makrovariablen unterschiedlich ist. – Reeza

3

Wenn Sie eine Makrovariable referenzieren, beginnt das & Zeichen eine Makrovariablenreferenz zu beginnen. Der Makroprozessor muss auch das Ende der Makrovariablenreferenz bestimmen.

In den meisten Fällen wird die Makroreferenz entweder durch Leerzeichen oder ein Semikolon beendet.

38 %let x=Hello; 
39 
40 %put &x; *semicolon ends the reference; 
Hello 
41 
42 %put &x World; *white space ends the reference; 
Hello World 

Makrovariablennamen können aus Buchstaben, Zahlen und Unterstrichen bestehen. Jedes Symbol, das nicht Teil einer Makrovariablen sein kann, beendet eine Referenz. Zum Beispiel kann ein Fragezeichen:

44 %put &x?; *Question mark ends the reference; 
Hello? 

Nun nehmen wir Sie die Zeichenfolge Hello World, ohne Leerzeichen zwischen Hallo und Welt erzeugen möchten:

46 %put &xWorld; 
WARNING: Apparent symbolic reference XWORLD not resolved. 
&xWorld 

, die nicht funktionierten. Der Makroprozessor hat eine Referenz auf eine Makrovariable namens xWorld gesehen, und es gibt keine solche Makrovariable. Also müssen wir dem Makroprozessor mitteilen, dass die Referenz der Makrovariablen nach dem x endet. Wir können eine Periode nach dem x hinzufügen, um zu sagen, dass "die Makrovariablen-Referenz hier endet".

47 %put &x.World; 
HelloWorld 

Beachten Sie, dass wichtig ist, die Zeit, die wir nicht im Text in das Protokoll geschrieben eingegeben wird gezeigt. Der Makroprozessor "isst" den Zeitraum, wenn er ihn als Ende der Makrovariablenreferenz verwendet.

Das bedeutet, dass in Fällen, in denen Sie nach einer Makrovariablenreferenz eine Periode haben möchten, Sie zwei Perioden eingeben müssen. Der erste wird vom Makroprozessor gegessen. Das übliche Beispiel hierfür ist mit einem libref:

48 %let mylib=sashelp; 
49 
50 proc print data=&mylib.class;run; 
ERROR: File WORK.SASHELPCLASS.DATA does not exist. 

NOTE: The SAS System stopped processing this step because of errors. 
51 
52 proc print data=&mylib..class;run; 

NOTE: There were 19 observations read from the data set SASHELP.CLASS. 

Einige Leute möchten immer Perioden verwenden, nachdem Makrovariablenreferenzen, als Programmierstil.Persönlich verwende ich nur den Zeitraum, wenn es notwendig ist, das Ende einer Makrovariablenreferenz anzugeben.

Verwandte Themen