2013-03-26 46 views

risposta

9

Non è necessario substr o striscia.

input(monyy,date9.); 
1

Prova

data _null_; 
    monyy = '05May2013'; 
    date = input(substr(strip(monyy),1,9),date9.); 
    put date=date9.; 
    run; 
0
input(char_val,current_date_format); 

È possibile specificare qualsiasi formato di data in visualizzazione tempo, come set char_val=date9.;

2

come detto sopra, la risposta è semplice:

date = input(monyy,date9.); 

con l'aggiunta di:

put date=yymmdd.; 

La ragione per cui questo funziona, e quello che hai fatto non significa, è a causa di un malinteso comune in SAS. DATE9. è un INFORMAT. In un'istruzione INPUT, fornisce all'interprete SAS una serie di comandi di traduzione che può inviare al compilatore per trasformare il testo nei numeri giusti, che appariranno come una data una volta applicato il FORMAT corretto. I FORMATI sono rappresentazioni visibili di numeri (o caratteri). . Quindi, utilizzando AAMMGG, è confuso la funzione INPUT consegnando un FORMAT invece di un INFORMAT, e probabilmente ottenuto un errore di utile che ha detto:

Invalid argument to INPUT function at line... etc... 

Quale ti ha detto assolutamente nulla di cosa fare dopo.

In breve, per rappresentare la data del tuo carattere come YYMMDD. In SAS è necessario:

  1. cambiamento del INFORMAT - date = input(monyy,date9.);
  2. applicare il formato - put date=YYMMDD10.;
+0

Se non è possibile lasciare un commento, non utilizzare una risposta per farlo. Ottieni una reputazione sufficiente e poi commenta. –

+1

@ JonathanDrapeau D'altra parte, questa è probabilmente un'occasione in cui è onestamente più una risposta che un commento. –

10

formati come

date9. 

o

mmddyy10. 

non sono validi per il comando di input durante la conversione del testo in una data sas. È possibile utilizzare

Date = input(cdate , ANYDTDTE11.); 

o

Date = input(cdate , ANYDTDTE10.); 

per la conversione.

+0

Avevo una variabile di caratteri di input che sembrava "1961-11-20" che volevo leggere come una data. Questa soluzione ha funzionato, dove gli altri no. – Underminer

+0

D'accordo, questa soluzione funziona meglio anche per i timbri a caratteri datetime. –

1

Questo codice consente:

data final; set final; 

first_date = INPUT(compress(char_date),date9.); format first_date date9.; 

run; 

io personalmente ho provato su SAS

Problemi correlati