Good afternoon,
I need help writing fixed-width text files from SAS dataset. I have SAS data set – Product with Product ID – 1, 2 and 3.
And I’m using following code to create text file.
filename outfile "/mnt/data01/test.txt"
data _null_;
file outfile ;
set WORK.Product;
put @1'Product ID'n 10. ;
run;
Result of the output is
123
I would like the output to be
Product ID
1
2
3
Thanks
Thanks for all your help. I was able to resolve the issue by using the "termstr=CRLF" option.
http://support.sas.com/kb/14/178.html
http://support.sas.com/kb/14/178.html
Thanks
The simplest fix is to add the following line code after your SET statement:
if _n_=1 then put 'Product ID';
Is your product id a numeric or character variable? You may have issues geting a numeric to left justify in this context.
Do a proc export to a text file and see the code generated in the log. That will let you know how to specify your code.
Something like the following may work as well (untested)
filename outfile "/mnt/data01/test.txt"
data _null_;
file outfile ;
set WORK.Product;
if _n_=1 then put 'Product ID';
put 'Product ID'n 10. ;
run;
i used the if _n_ =1 then put .....and i'm still getting data in one line
Product ID
123
I woulud like the result to be:
Product ID
1
2
3
Thanks
Post your code.
That isn't happening for me.
filename outfile "C:\_localdata\test.txt";
data _null_;
file outfile;
set sashelp.class;
if _n_=1 then put "Name";
put name $8.;
run;
Would this work on Linux ? Outfile file is on linux server.
Yes it works on unix.
What does your data look like?
Another possibility is your text editor is garbling it. Try viewing it in something else or via the more command in unix.
You still haven't posted your code though.
Reeza,
I use the following code and when I transfer the file from Linux to windows files out put is - Product_id 123.
However, when I edit the file out put is different -
Product ID
1
2
3
Reeza wrote:
Yes it works on unix.
What does your data look like?
Another possibility is your text editor is garbling it. Try viewing it in something else or via the more command in unix.
You still haven't posted your code though.
data product;
infile datalines;
input product_id $;
datalines;
1
2
3
;
filename outfile "/mnt/data01/test.txt";
data _null_;
file outfile Encoding=u;
set Product;
if _N_ = 1 then put 'Product_id';
do _N_ = 1 to length(Product_id);
id=substr(Product_id,_N_,1);
put @1'id'n 10.;
output;
end;
run;
I think your dataset cotains one row 123. If that is the case then try this.
data product;
infile datalines;
input product_id $;
datalines;
123
;
filename outfile "C:\_localdata\test.txt";
data _null_;
file outfile;
set Product;
if _N_ = 1 then put 'Product_id';
do _N_ = 1 to length(Product_id);
id=substr(Product_id,_N_,1);
put @1'id'n 10.;
output;
end;
run;
Sounds like your file is getting converted somehow in transit.
SAS is actually very good at looking at what is actually in your file.
Try this simple data step on your file.
data _null_;
infile outfile ;
input;
list;
run;
Also try it using RECFM=F and LRECL=80 in the INFILE statement and then you can see what characters are placed between the lines.
Windows normally expects CR+LF ('0D0A'X) at the end of every line and Unix will normally just have LF ('0A'x). In the old days Mac's used just CR ('0D'X) but I don't think they do that any more.
Thanks for all your help. I was able to resolve the issue by using the "termstr=CRLF" option.
http://support.sas.com/kb/14/178.html
http://support.sas.com/kb/14/178.html
Thanks
SAS Innovate 2025 is scheduled for May 6-9 in Orlando, FL. Sign up to be first to learn about the agenda and registration!
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.