2017-05-23 1 views
1

Eher seltsames Problem, das ich gerade entdeckt habe. Ich führe den folgenden Code in SAS aus.Datenlinien, die nicht durch% funktionieren, sind in SAS enthalten.

data manual_input; 
infile datalines dlm=','; 
length name $ 32 ; 
input name $ varlist_no ; 
datalines; 
K0002,1 
B0000,1 
; 
run; 

Wenn ich dies normal in meinem erweiterten Editor in Enterprise Guide auf unserem Unix-Server ausführen, funktioniert es gut, keine Probleme.

Wenn ich es durch ein% include-Anweisung ausführen, wie folgt:

filename ds_code "/wload/something/something/foo/bar"; 
%include ds_code ("varlist_input_test.sas") /source2; 

Der Code funktioniert nicht mehr. Ich bekomme Fehler wie folgt:

NOTE: Invalid data for varlist_no in line 24 7-80. 
RULE:  ----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0      

24 CHAR K0002,1.                   
    ZONE 43333230222222222222222222222222222222222222222222222222222222222222222222222222 
    NUMR B0002C1D000000000000000000000000000000000000000000000000000000000000000000000000 
name=K0002 varlist_no=. _ERROR_=1 _N_=1 
NOTE: Invalid data for varlist_no in line 25 7-80. 

25 CHAR B0000,1.                   
    ZONE 43333230222222222222222222222222222222222222222222222222222222222222222222222222 
    NUMR 20000C1D000000000000000000000000000000000000000000000000000000000000000000000000 
name=B0000 varlist_no=. _ERROR_=1 _N_=2 
NOTE: The data set WORK.MANUAL_INPUT has 2 observations and 2 variables. 
NOTE: Compressing data set WORK.MANUAL_INPUT increased size by 100.00 percent. 
     Compressed is 2 pages; un-compressed would require 1 pages. 

Was gibt ?! Ich habe eine Komma-getrennte Eingabe angegeben. Ich verstehe auch, warum Datalines innerhalb eines Makros nicht funktionieren würden - warum müssten Sie eine statische Dateneingabe wiederholt ausführen? Ich glaube jedoch, dass es vollkommen akzeptabel ist, eine Include-Anweisung zu verwenden, um einen Codeabschnitt aufzurufen, der Karten/Datenlinien verwendet.

Wer hat irgendwelche Ideen?

Antwort

1

Sieht so aus, als hätten Sie ein EOL-Zeichen (End-of-Line), das in Ihrer% included-Datei hängt. Wahrscheinlich haben Sie die Include-Datei in Windows erstellt (CR/LF-EOL-Zeichen) und enthalten% in Unix (nur LF), so dass das CR-Zeichen immer noch vorhanden ist, aber nicht als Teil des End-of-Line-Abschlusszeichens behandelt wird.

Sie müssen entweder diese Datei in Unix erstellen, oder sie ordnungsgemäß übertragen (mit einem intelligenten FTP-Programm, das den Zeilenabschluss beheben kann), oder entfernen Sie es selbst (COMPRESS mit dem optionalen dritten Argument 'C' wird es tun).

Sie können dies auch mit der Option TERMSTR unter filename oder %include beheben. Zum Beispiel habe ich Ihre Fehler hier absichtlich wiedergeben kann (unter der Annahme test_include.sas hat Ihren Code in it):

filename testincl "c:\temp\test_include.sas" termstr=LF; 
%include testincl; 

Und Sie können dies umkehren:

filename testincl "c:\temp\test_include.sas" termstr=CRLF; 
%include testincl; 
+1

Sie können die 'TERMSTR hinzufügen =' Option der '% INCLUDE'-Anweisung. – Tom

+0

Guter Punkt, hinzugefügt. – Joe

Verwandte Themen