Hi,
I have a problem when I use SAS to clean a downloaded dataset. The dataset looks like as below:
| File_type | File_date |
| mm|cd|ab | 2000-01-01|2000-04-03|2000-02-28 |
| fg|mm | 2010-04-11|2010-05-03 |
| …… | …… |
| j10|ab|mm | 2013-11-01|2013-12-03|2013-12-25 |
| mm | 2014-05-01 |
Now I want to extract file_type "mm" and its corresponding file_date in the new columns as shown below:
| File_type | File_date | file_type_new | file_date_new |
| mm|cd|ab | 2000-01-01|2000-04-03|2000-02-28 | mm | 2000-01-01 |
| fg|mm | 2010-04-11|2010-05-03 | mm | 2010-05-03 |
| …… | …… | …… | …… |
| j10|ab|mm | 2013-11-01|2013-12-03|2013-12-25 | mm | 2013-12-25 |
| mm | 2014-05-01 | mm | 2014-05-01 |
I will appreciate it very much if someone can help me with this. Thanks!
data have; infile datalines truncover; informat file_type $20. file_date $60.; input File_type File_date ; datalines; mm|cd|ab 2000-01-01|2000-04-03|2000-02-28 fg|mm 2010-04-11|2010-05-03 run; data want; set have; file_type_new = 'mm'; file_new_date= scan(file_date,findw(strip(file_type),'mm','|','e'),'|'); run;
If you want to get all of the filetypes and dates on a separate record something like:
data want;
set have;
do i = 1 to countw(file_type,'|');
file_type_new = strip(scan(file_type,i,'|'));
file_new_date= scan(file_date,i,'|');
output;
end;
drop i;
run;
if any of your file types have more than 2 characters you need to provide a LENGHT statement for File_type_new to set that length.
I personally would change file_new_date to a SAS date value with :
data want;
set have;
do i = 1 to countw(file_type,'|');
file_type_new = strip(scan(file_type,i,'|'));
file_new_date= input( scan(file_date,i,'|'),yymmdd10.);
output;
end;
drop i;
format file_new_date yymmdd10.;
run;
data have; infile datalines truncover; informat file_type $20. file_date $60.; input File_type File_date ; datalines; mm|cd|ab 2000-01-01|2000-04-03|2000-02-28 fg|mm 2010-04-11|2010-05-03 run; data want; set have; file_type_new = 'mm'; file_new_date= scan(file_date,findw(strip(file_type),'mm','|','e'),'|'); run;
If you want to get all of the filetypes and dates on a separate record something like:
data want;
set have;
do i = 1 to countw(file_type,'|');
file_type_new = strip(scan(file_type,i,'|'));
file_new_date= scan(file_date,i,'|');
output;
end;
drop i;
run;
if any of your file types have more than 2 characters you need to provide a LENGHT statement for File_type_new to set that length.
I personally would change file_new_date to a SAS date value with :
data want;
set have;
do i = 1 to countw(file_type,'|');
file_type_new = strip(scan(file_type,i,'|'));
file_new_date= input( scan(file_date,i,'|'),yymmdd10.);
output;
end;
drop i;
format file_new_date yymmdd10.;
run;
April 27 – 30 | Gaylord Texan | Grapevine, Texas
Walk in ready to learn. Walk out ready to deliver. This is the data and AI conference you can't afford to miss.
Register now and save with the early bird rate—just $795!
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.