Have I got this logic right? You currently have just a list of names. You want to expand that so that for each name you have one observation for each week of the year, with a variable for the week number, and a variable for the start date of that week where weeks start on a Sunday. If that is correct then the below should get you what you want. It will output 52 or 53 observations per name, depending on how close Sunday is to the start of the year. data have;
informat adjuster $20.;
input adjuster;
datalines;
PAUL
KATHRYN
EMMA
VICTOR
SAM
;run;
data want;
set have;
format StartDt date9.;
drop EndDt; /* This is just used to check if we've entered enough weeks to cover the year */
Week= 1;
EndDt= intnx('year',date(),0,'E'); /* End of current year */
StartDt= intnx('year',EndDt,-1,'E'); /* End of last year */
StartDt= intnx('week',StartDt,1,'B'); /* First Sunday of current year */
do while (StartDt <= EndDt);
output; /* We started with values for week 1 so output a record immediately */
Week= Week+1; /* Increment the week counter by 1 */
StartDt= StartDt+7; /* A week is always 7 days long so increment date by 7 */
/* Another loop will start as long as StartDt is still in the current year */
end;
run; The code assumes week 1 starts on the first Sunday of the year, with any days before that belonging to the last week of the previous year.
... View more