I use SAS E.G. version 4.3.
There are datasets (in a folder called archive) where the names are something like this: "table_contents_[year]", where [year] = 2012, 2013, 2014, ...
For example: table_contents_2012, table_contents_2013, ..., table_contents_2016.
One of the variables of these datasets is a date variable that contains dates for that certain year.
I want to put the data from these datasets into one new dataset, but selecting only data as from a certain year or a certain date. How can I do this?
With the statement below, I can extract and put the data from ALL datasets with name "tablecontents_[year]" into a new dataset.
But I don't know how I can select data that are for example greater than or equal to year 2015 or 10SEP2015?
%let listOfDataTables =;
proc sql noprint;
select compress("arch." || memname)
into :listOfDataTables separated by ' '
from sashelp.vtable
where libname=upcase("arch") and upcase(memname) like 'tablecontents*_%' escape '*';
quit;
where libname=upcase("arch") and input(scan(memname,-1,'_') ,best8.) gt 2015
First, its not a good idea to split same data up into multiplpe datasets, this just makes your life harder. Set all your data together and have year as a column:
data want; length v $50; set table_contents_: indsname=tmp; v=tmp; run;
You can process indsname to get year. You can then simply where clause this one dataset rather than trying to loop over many.
where libname=upcase("arch") and input(scan(memname,-1,'_') ,best8.) gt 2015
This works. Thank you!
Good news: We've extended SAS Hackathon registration until Sept. 12, so you still have time to be part of our biggest event yet – our five-year anniversary!
Check out this tutorial series to learn how to build your own steps in SAS Studio.
Find more tutorials on the SAS Users YouTube channel.
Ready to level-up your skills? Choose your own adventure.