Dear SAS expertise,
I need a help. I have a mainframe flat file and its layout (copybook). I can open it in file manager to see the data in readable format. But I want to copy this file to an output with the layout and convert few packed decimal fields into numeric format. I payed with file manager and no luck. Can someone share some sudo code how to copy a flat file to table formatted output file using input file and its copybook layout. Appreciate your feedback. Thanks
You can't do that while you're copying. Packed decimals require the file to be copied as is and then read by SAS with the S370FPD informat.
The safest way is to use a BINARY file transfer from mainframe to ASCII computer, then use S370 INFORMATs on ALL data columns being read in, including text. These transform the EBCDIC data in the file to ASCII format.
How do you copy the file from the mainframe to your SAS environment (FTP, SFTP)?
Which platform (Windows or UNIX) does your SAS run on?
my SAS runs on mainframe. do not have SAS desktop version
@Phil20 wrote:
my SAS runs on mainframe. do not have SAS desktop version
So you don't need to copy anything, you just read the file into a SAS dataset (using the aforementioned S370FPD informat for the packed decimals) and then write it back out using textual formats.
correct.
can you share a sudo code for S370FPD informat
What does sudo have to do with this? sudo is a UNIX utility for changing the current user on the fly without knowing the target user password.
The documentation of the S370FPD informat is found here.
Sounds like you don't want to copy the file.
Sounds like you want to read the file into a dataset and then write it back into a new file with a slightly different structure.
Does that sound right?
So show the code you would run to read the existing file into a dataset.
Describe the new file you want to create and show the code you would use to convert the dataset into that structure.
For example you might have a fixed length file with some packed decimal and other fields and what to create a comma delimited file of pure text. You could do it without writing any actual SAS dataset by reading and writing in a single data _NULL_ step.
filename in 'orginal file';
filename out 'new file';
data _null_;
infile in ;
input field1 $ASCII10. field2 s370pd8. .... ;
file out dsd ;
put field1 field2 .... ;
run;
I want to copy the input file into a new one with reformatted. especially convert ZD fields into readable numeric fields. please see the before and after text files. I opened the same file in file manager with the copybook to show the after look
The before look is from 3.4 dataset view.
You seem to be using some type of specialized vocabulary. I don't know what a "COPYBOOK" is or "a 3.4 dataset view". I assumed you meant you had documentation on how the file was structured, but you don't seem to have presented that documentation. You will need to know what is in the file to be able to convert it.
If you only want to convert some of the fields you could just read the parts you want to leave alone as text strings.
But it will probably work better if actually read the whole file into a SAS dataset. Then you can actually check that you have read it right by doing some quick QC on the values using PROC MEANS or PROC FREQ.
Then write the file out in the layout you want.
If you need help post example of the actual data lines of the original file. The actual description of what the file contains and a description of the new layout you want to create.
3.4 seems to be the menu selection in the Program Development Facility, which invokes the dataset viewer.
@Phil20 - Did you read my post? The best way to handle this is to use FTP to copy the file (unchanged) from mainframe to desktop or server using the BINARY option. If you don't use the BINARY option it will scramble your ZD fields so they can't be read easily.
Then you use SAS on your desktop or server with S370 INFORMATs to do the translation. I've done this a lot myself in the past and it works very well.
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.