BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
niespolo
Obsidian | Level 7

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.

 

 

 

 


maximum line exceeded.png
1 ACCEPTED SOLUTION
10 REPLIES 10
Tim_SAS
Barite | Level 11

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;

 

Kurt_Bremser
Super User

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";

 

niespolo
Obsidian | Level 7

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.

niespolo
Obsidian | Level 7

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";
Patrick
Opal | Level 21

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? 

niespolo
Obsidian | Level 7

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 ...
Patrick
Opal | Level 21

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;

Capture.PNG

niespolo
Obsidian | Level 7

Try to add the option DSD in the file statement as I've done

Patrick
Opal | Level 21

O.K., got it, and I couldn't find an alternative way even with a newer DIS version.

 

Thanks for your time.

sas-innovate-2024.png

Don't miss out on SAS Innovate - Register now for the FREE Livestream!

Can't make it to Vegas? No problem! Watch our general sessions LIVE or on-demand starting April 17th. Hear from SAS execs, best-selling author Adam Grant, Hot Ones host Sean Evans, top tech journalist Kara Swisher, AI expert Cassie Kozyrkov, and the mind-blowing dance crew iLuminate! Plus, get access to over 20 breakout sessions.

 

Register now!

How to Concatenate Values

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.

Click image to register for webinarClick image to register for webinar

Classroom Training Available!

Select SAS Training centers are offering in-person courses. View upcoming courses for:

View all other training opportunities.

Discussion stats
  • 10 replies
  • 6935 views
  • 2 likes
  • 4 in conversation