Hi,
I've edited the code of a File Writer Transformation in SAS DI 4.4. The following line 405 has been added:
put
"IDENTIFICATIVO_FATTURA|CONTO_CLIENTE|CODICE_FATTURA|DATA_EMISSIONE_FATTURA|CODICE_TIPOFATTURA|CODICE_CLIENTE|CODICE_CONTOCONTRATTUALE|POD_PDR|DATA_REGISTRAZIONE|CODICE_PDR|FLAG_PDR_SMONTATO|LIVELLO_SOLLECITO_ISU|CODICE_TIPODOCUMENTO|CODICE_SETTORECONTABILE|CODICE_SOCIETAISU|IMPORTO_INSOLUTO_RATA|DATA_SCADENZAORIGINALE|DATA_DILAZIONE|IMPORTO_TOTALE_RATA|IMPORTO_PAGATO_RATA|CODICE_BLOCCO|SF|FLAG_RACCOMANDATA_INESITATA|FLAG_PRIMA_FATTURA|FLAG_FATTURA_CHIUSURA|CODICE_MODALITAPAGAMENTOISU|PERIODO_FISCALE_INIZIO|PERIODO_FISCALE_FINE|IMPORTO_CMOR_PASSIVO|CODICE_MOTIVOPAREGGIO|DATA_PAREGGIO|CAUSALE_INSOLUTO_RID|DATA_MAX_SCAD_RECLAMO|NUM_TOT_RATE|NUM_TOT_RATE_APERTE|DATA_PROX_RATA|DATA_INSOLUTORID|FLAG_INSOLUTORIDPREMATURAZIONE|FLAG_FATTURAZIONEBEASY|FLAG_FATTURASOTTOSOGLIA|DATA_CESSIONE|CODICE_STATOCESSIONE|CODICE_FACTOR";
The line is long 826 character and should be inserted in the first row of a .csv file. Infact, it rapresents the header of the columns in the file. After adding this long line in the code block and clicked "OK", the attached message is displayed. If I click "Yes", the job splits the long line in more lines in the file and the first row of the .csv is:
IDENTIFICATIVO_FATTURA|CONTO_CLIENTE|CODICE_FATTURA|DATA_EMISSIONE_FATTURA|CODICE_TIPOFATTURA|CODICE_CLIENTE|CODICE_CONTOCONTRATTUALE|POD_PDR|DATA_REGISTRAZIONE|CODICE_PDR|FLAG_PDR_SMONTATO|LIVELLO_SOLLECITO_ISU|CODICE_TIPODOCUMENTO|CODICE_SETTORECONTABILE |CODICE_SOCIETAISU|IMPORTO_INSOLUTO_RATA|DATA_SCADENZAORIGINALE|DATA_DILAZIONE|IMPORTO_TOTALE_RATA|IMPORTO_PAGATO_RATA|CODICE_BLOCCO|SF|FLAG_RACCOMANDATA_INESITATA|FLAG_PRIMA_FATTURA|FLAG_FATTURA_CHIUSURA|CODICE_MODALITAPAGAMENTOISU|PERIODO_FISCALE_INIZIO| PERIODO_FISCALE_FINE|IMPORTO_CMOR_PASSIVO|CODICE_MOTIVOPAREGGIO|DATA_PAREGGIO|CAUSALE_INSOLUTO_RID|DATA_MAX_SCAD_RECLAMO|NUM_TOT_RATE|NUM_TOT_RATE_APERTE|DATA_PROX_RATA|DATA_INSOLUTORID|FLAG_INSOLUTORIDPREMATURAZIONE|FLAG_FATTURAZIONEBEASY|FLAG_FATTURASOTT OSOGLIA|DATA_CESSIONE|CODICE_STATOCESSIONE|CODICE_FACTOR
How is it possible to write the long line in the first row of the file without the line break when the 255 th carachter is exceeded?
Yhank you.
Did you set lrecl= to a sufficient value in your file statement?
In general you can create a very long SAS statement by simply breaking the statement across several lines.
data _null_;
put "This is a statement that
starts on one line and ends on the next";
run;
I have always made it a point to avoid program lines in excess of the classical 80 characters. This makes it easy to edit programs on simple telnet/putty connections to the server, avoids mistakes because of misunderstood line breaks, and reduces the scanning movement of your eyes, which is a major factor in tiring you down when programming.
Call it programmer's ergonomy.
If you need to write a long line to a csv, do
put "very long content line part 1"@;
put "very long content line part 2"@;
....
put "very long content line part N"@;
put "end of very long content line";
Hi,
i've tried the both solutions:
put "IDENTIFICATIVO_FATTURA|CONTO_CLIENTE|CODICE_FATTURA|DATA_EMISSIONE_FATTURA|CODICE_TIPOFATTURA|CODICE_CLIENTE|CODICE_CONTOCONTRATTUALE|POD_PDR|DATA_REGISTRAZIONE|CODICE_PDR|FLAG_PDR_SMONTATO|LIVELLO_SOLLECITO_ISU|CODICE_TIPODOCUMENTO|
CODICE_SETTORECONTABILE|CODICE_SOCIETAISU|IMPORTO_INSOLUTO_RATA|DATA_SCADENZAORIGINALE|DATA_DILAZIONE|IMPORTO_TOTALE_RATA|IMPORTO_PAGATO_RATA|CODICE_BLOCCO|SF|FLAG_RACCOMANDATA_INESITATA|FLAG_PRIMA_FATTURA|FLAG_FATTURA_CHIUSURA|
CODICE_MODALITAPAGAMENTOISU|PERIODO_FISCALE_INIZIO|PERIODO_FISCALE_FINE|IMPORTO_CMOR_PASSIVO|CODICE_MOTIVOPAREGGIO|DATA_PAREGGIO|CAUSALE_INSOLUTO_RID|DATA_MAX_SCAD_RECLAMO|NUM_TOT_RATE|NUM_TOT_RATE_APERTE|DATA_PROX_RATA|DATA_INSOLUTORID|
FLAG_INSOLUTORIDPREMATURAZIONE|FLAG_FATTURAZIONEBEASY|FLAG_FATTURASOTTOSOGLIA|DATA_CESSIONE|CODICE_STATOCESSIONE|CODICE_FACTOR";
and this:
put "IDENTIFICATIVO_FATTURA|CONTO_CLIENTE|CODICE_FATTURA|DATA_EMISSIONE_FATTURA|CODICE_TIPOFATTURA|CODICE_CLIENTE|CODICE_CONTOCONTRATTUALE|POD_PDR|DATA_REGISTRAZIONE|CODICE_PDR|FLAG_PDR_SMONTATO|LIVELLO_SOLLECITO_ISU|CODICE_TIPODOCUMENTO|"@;
put "CODICE_SETTORECONTABILE|CODICE_SOCIETAISU|IMPORTO_INSOLUTO_RATA|DATA_SCADENZAORIGINALE|DATA_DILAZIONE|IMPORTO_TOTALE_RATA|IMPORTO_PAGATO_RATA|CODICE_BLOCCO|SF|FLAG_RACCOMANDATA_INESITATA|FLAG_PRIMA_FATTURA|FLAG_FATTURA_CHIUSURA|"@;
put "CODICE_MODALITAPAGAMENTOISU|PERIODO_FISCALE_INIZIO|PERIODO_FISCALE_FINE|IMPORTO_CMOR_PASSIVO|CODICE_MOTIVOPAREGGIO|DATA_PAREGGIO|CAUSALE_INSOLUTO_RID|DATA_MAX_SCAD_RECLAMO|NUM_TOT_RATE|NUM_TOT_RATE_APERTE|DATA_PROX_RATA|DATA_INSOLUTORID|"@;
put "FLAG_INSOLUTORIDPREMATURAZIONE|FLAG_FATTURAZIONEBEASY|FLAG_FATTURASOTTOSOGLIA|DATA_CESSIONE|CODICE_STATOCESSIONE|CODICE_FACTOR";
but they don't print all the characters into a single row: there are more rows and not one row in the file.
Did you set lrecl= to a sufficient value in your file statement?
Solved setting lrecl=1000 and using the following code:
put "IDENTIFICATIVO_FATTURA|CONTO_CLIENTE|CODICE_FATTURA|DATA_EMISSIONE_FATTURA|CODICE_TIPOFATTURA|CODICE_CLIENTE|CODICE_CONTOCONTRATTUALE|POD_PDR|DATA_REGISTRAZIONE|CODICE_PDR|FLAG_PDR_SMONTATO|LIVELLO_SOLLECITO_ISU|CODICE_TIPODOCUMENTO|"@;
put "CODICE_SETTORECONTABILE|CODICE_SOCIETAISU|IMPORTO_INSOLUTO_RATA|DATA_SCADENZAORIGINALE|DATA_DILAZIONE|IMPORTO_TOTALE_RATA|IMPORTO_PAGATO_RATA|CODICE_BLOCCO|SF|FLAG_RACCOMANDATA_INESITATA|FLAG_PRIMA_FATTURA|FLAG_FATTURA_CHIUSURA|"@;
put "CODICE_MODALITAPAGAMENTOISU|PERIODO_FISCALE_INIZIO|PERIODO_FISCALE_FINE|IMPORTO_CMOR_PASSIVO|CODICE_MOTIVOPAREGGIO|DATA_PAREGGIO|CAUSALE_INSOLUTO_RID|DATA_MAX_SCAD_RECLAMO|NUM_TOT_RATE|NUM_TOT_RATE_APERTE|DATA_PROX_RATA|DATA_INSOLUTORID|"@;
put "FLAG_INSOLUTORIDPREMATURAZIONE|FLAG_FATTURAZIONEBEASY|FLAG_FATTURASOTTOSOGLIA|DATA_CESSIONE|CODICE_STATOCESSIONE|CODICE_FACTOR";
Breaking up the put statement using the @ modifier and a sufficiently big value for lrecl will resolve the issue.
May I ask why you are switching the File Writer code to user written in first place?
Hi Patrick,
I've edited the code because the automatically generated code added spaces in the blank fields (ex.: " " instead of ""). The automatically generated code was:
file 'C:\...\file.csv' dlm='|';
put
quote +(-1) IDENTIFICATIVO_FATTURA +(-1) quote
quote +(-1) CONTO_CLIENTE +(-1) quote
quote +(-1) CODICE_FATTURA +(-1) quote
quote +(-1) DATA_EMISSIONE_FATTURA +(-1) quote
...
And it's been replaced with this:
file 'C:\...\file.csv' DSD dlm='|' lrecl=1000;
put
IDENTIFICATIVO_FATTURA
CONTO_CLIENTE
CODICE_FATTURA
...
This will still write a blank for a missing character variable and a dot for a missing numeric variable.
data _null_;
set sashelp.class;
if _n_=2 then call missing(age);
if _n_=3 then call missing(name);
file 'C:\temp\file.csv' dlm='|';;
put
name
age
sex
;
run;
Try to add the option DSD in the file statement as I've done
O.K., got it, and I couldn't find an alternative way even with a newer DIS version.
Thanks for your time.
Registration is now open for SAS Innovate 2025 , our biggest and most exciting global event of the year! Join us in Orlando, FL, May 6-9.
Sign up by Dec. 31 to get the 2024 rate of just $495.
Register now!
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.
Ready to level-up your skills? Choose your own adventure.