I'm certainly willing to transform the dataset based on this guidance (assuming I can figure it out w/ all these variables). Wouldn't it be easier if I first subset the dataset to something more manageable?
Regarding my original objective(s): It looks like the synxtax below does what I want it to do. I'm sure there are better ways to do this, but in the spirit of @Reeza ("There's probably more efficient methods, but if this is one you understand and can edit/update yourself it's the easiest")...
Any chance you could take a quick look at the syntax below and let me know if you think anything looks objectively wrong?
proc sql noprint;
select name into :colnames separated by ' ' /* Selects the name variable, which would typically contain column names.; */
/* It then places the selected names into a macro variable named colnames, with each name separated by a space.; */
from dictionary.columns
/* This line specifies the source of the data, which is the dictionary.columns table in SAS. */
/* This is a special table that contains metadata about all available datasets, including column names. */
where
/* Age */
substr(name,4) eq 'AGE' or
/* Education */
substr(name,4) eq 'ED' or
/* BMI */
substr(name,4) eq 'BMI' or
/* Note: Neither BMI nor height nor weight are available in the data I have. */
/* Exam dates */
/* Not including exam date 35 (see below as J02EXDAT) */
substr(name,2) eq '02DATE' or
/* Smoking status */
substr(name,2) eq '10SMOKE'
and libname='CARDIA' /* Whatever libname is needed goes here, upper case */
and memname='C1260REQ06_29_2023' /* Your data set name goes here, upper case */
;
quit;
/***********************************************************************************************************/
/* Creating a subset. */
/* &colnames (from above) is included in the KEEP statement. */
/***********************************************************************************************************/
data cardia.go;
set CARDIA.C1260REQ06_29_2023;
keep
ID
SHORT_ID
SEX
race
/* Suffix Variables */
&colnames
/* Preffix Variables */
CENTER:
/* Per Lucia: The exam at Y35 was carried out in two phases. We are still discussing the best way to assemble a Reference File for this exam. */
/* We have variable J02EXDAT. */
J02EXDAT
/* TAKING DIABETES MEDS (1=NO,2=YES) at baseline */
FDIABMED
;
label J02EXDAT="DATE OF EXAM 10";
run;
/* proc contents data=cardia.go varnum; run; */
/* proc print data=cardia.go (obs=10); run; */
/* ********************************************************************************************************* */
/* The syntax below allows for subsetting based on a prefix (i.e., exam year) */
/* ********************************************************************************************************* */
/* To subset for exam year 35: "J" */
proc sql noprint;
select name into :colnames_j separated by ' '
from dictionary.columns
where upcase(substr(name,1,1)) eq 'J' /* Your suffix goes here */
and libname='CARDIA' /* Whatever libname is needed goes here, upper case */
and memname='go' /* Your data set name goes here, upper case */
;
quit;
data CARDIA.go_j;
set CARDIA.go;
keep
ID
SHORT_ID
SEX
race
center30
/* Suffix Variables */
&colnames_j
J02EXDAT
;
run;
proc contents data=cardia.go_j varnum; run;
proc print data=cardia.go_j (obs=10); run;
Thanks for your time and patience w/ me.
... View more