Hi folks,
My objective is to create a txt file from a SAS dataset with both the variable names and the data seperated by "^".
My initial strategy was to divide it into two parts: first export a file with only the variable names. Then export the data to the same txt file.
*STEP 1;
data _null_;
set work.mySASdata;
Retain count 0;count+1;
file "&filelocation";
length line $ 200;
varnameline=strip('var1^var2^var3^var4');
if count=1 then put VarnameLine;
run;
*STEP 2;
proc export data=mySASdata
outfile="&filelocation"
dbms=dlm replace;
delimiter='^';
putnames=no;
run;
The problem is that the second step seems to require the option REPLACE, which would overwrite, rather than append to, the file with only the variable names seperated by ^.
Q1: Is there a way to export SAS9.4 to text without replacement?
Q2: Is there a way to do this in one export or datastep so I won't need an answer to Q1 above?
Thanks,
Tim
Why do you need two steps? The following proc export seems to produce the desired result:
proc export data=sashelp.class dbms=dlm file="&filelocation" replace;
delimiter='^';
run;
If you don't want/have to print the real variable names, you have two options:
data _null_;
set sashelp.class;
file "&filelocation" delimiter="^";
if _n_ = 1 then do;
put "Var1^Var2^Var3^Var4^Var5";
end;
put Name Sex Age Weight Height;
run;
It sounds like you are want to append more than one data set to the exported file.
If that is the case then you might have to go back to a data _null_ for the follow up data and use the FILE statement option MOD which writes at the end of an existing file if it already exists.
Or combine all of the data involved into a single data set and use Proc Export with putnames=yes
It occurs to me that one 3-step solution would be the following:
STEP1: export SAS data to excel
STEP2: import data from the excel, starting with line 1 (rather than two).The new SAS file, work.NewFile, should have the original variable names as the first record of the data.
STEP3:
Proc Export data=work.NewFile
outfile='c:\newTxtFile.txt'
dbms=dlm replace ;
delimiter='^';
Putnames=No;
run;
Why do you need two steps? The following proc export seems to produce the desired result:
proc export data=sashelp.class dbms=dlm file="&filelocation" replace;
delimiter='^';
run;
If you don't want/have to print the real variable names, you have two options:
data _null_;
set sashelp.class;
file "&filelocation" delimiter="^";
if _n_ = 1 then do;
put "Var1^Var2^Var3^Var4^Var5";
end;
put Name Sex Age Weight Height;
run;
Wy do I need two (or three) steps? Because I'm a SAS dummy
I cannot believe that I spent so much time trying to figure out an alternative solution based on the assumption that it would export the data in the wrong way, without even testing it.
UGH!
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.