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

Join us for SAS Innovate April 16-19 at the Aria in Las Vegas. Bring the team and save big with our group pricing for a limited time only.

Pre-conference courses and tutorials are filling up fast and are always a sellout. Register today to reserve your seat.

 

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
  • 6857 views
  • 2 likes
  • 4 in conversation