2016-08-08 63 views
1

Ich habe derzeit einen Datensatz mit Datumsangaben im Format "FY15 FEB". Bei dem Versuch, diese Variable zu formatieren, für die Verwendung mit SAS Zeiten und Daten, habe ich folgendes getan:So formatieren Sie den Eingang für das MONYY-Format von SAS

data temp; 
    set pre_temp; 
    yr = substr(fiscal,3,2); 
    month = substr(fiscal,6,length(fiscal)); 
    mmmyy = month||yr; 
    input mmmyy MONYY5.; 
    datalines; 
run; 

Also, ich habe die Saiten das Jahr und die entsprechenden Monat darstellen. Die Ausführung dieses Codes gibt mir jedoch den Fehler "Die informat $ MONYY wurde nicht gefunden oder konnte nicht geladen werden." Einige Hintergrundinformationen zu diesem Fehler zeigen mir, dass es etwas damit zu tun hat, dem Informat einen Wert mit dem falschen Typ zu übergeben. Was muss ich ändern, um die richtige Ausgabe zu erhalten?

* Bearbeiten: Ich sehe auf der SAS-Support-Seite für Formate, die "MONYYw. Erwartet einen SAS-Datumswert als Eingabe;" Wie kann ich von Strings zu einem anderen Datumsformat vor diesem wechseln?

Antwort

1

Wenn Sie ein $ sehen, bedeutet das Zeichenwert. In diesem Fall geben Sie SAS einen Zeichenwert und geben ihm ein numerisches Format. SAS fügt das $ für Sie ein, aber ein solches Format existiert nicht.

Ich werde die Datalines-Anweisung ignorieren, weil ich nicht sicher bin, warum es dort ist (obwohl ich bemerke, dass es keine Set-Anweisung gibt). Vielleicht haben Sie es leichter haben, nur um das Programm zu ändern:

data temp; 
    yr = substr(fiscal,3,2); 
    month = substr(fiscal,6,length(fiscal)); 
    pre_mmmyy = strip(month)||strip(yr); 
    mmmyy=input(pre_mmmyy,MONYY5.); 
run; 

Sie können auch die „Länge (steuerliche))“ aus der Teilzeichenfunktion entfernen. Das dritte Argument der Teilzeichenfolgefunktion ist optional und wird standardmäßig an das Ende der Zeichenfolge übergeben.

+0

Danke! Ich bin ziemlich neu in SAS, also denke ich, dass die Datalines-Anweisung da drin war, weil ich missverstanden habe, wie die Eingabeanweisung funktionieren soll. Mein tatsächlicher Code enthält auch eine Set-Anweisung, die ich einfach aus der Frage weggelassen habe. Wird es wieder hinzufügen, um Verwirrung zu vermeiden. –

+0

'lengthn()' und 'substrn()' sollten immer anstelle von 'length()' und 'substr()' verwendet werden. Sie behandeln Kantenfälle besser, und im Falle von 'lengthn()' gibt sie '0' anstelle von' 1' für leere Zeichenfolgen zurück, was mit jeder anderen Sprache übereinstimmt. –

+0

Als Follow-up, verstehe ich richtig, dass das Problem war, dass ich die Argumente der führenden/nachgestellten Leerzeichen, die das Problem verursacht hatten, nicht entfernt hatte, oder war es die Funktion input()? –