Hello, I'm new to macros and arrays. This was an assignment I had from a few weeks ago that I don't think I did correctly. Part three looping macros is what is giving me trouble. Can someone tell me where I am going wrong? I'm attaching the assignment and my code. I think what gets me confused is when my professor tells me to convert my array into a macro. Am I converting an array into a macro? Also, The single macro with parameters runs fine, but my final macro is a mess. What am I doing wrong? Thank you, Kim ***Assignment*** Loops, Arrays, and Macros:A Little Fun? with WordsumIntroduction: This assignment is due October 5. It will conclude our tour of computational techniques that advanced survey data analysts should be able to employ. The emphasis here is on concise, elegant code that causes great things to happen. Submit code and logs. Grades will be based on how few lines (semicolons) of code you use to accomplish the tasks. To be sure, this one starts out fairly easy and becomes very challenging. You will iterate through a lot of variations in code. Start early. It actually is rewarding when you crack the coding nut. Background: Study up on the WORDSUM and WORDA—WORDJ variables in the GSS cumulative file. You will find that this is a verbal intelligence test designed for surveys. Like a lot of methodological innovations, Gallup started using this in the 1940s. Pay special attention to the years in which these items appeared on GSS (hint: see around pg. 3761 in the codebook .pdf file). You should be able to do this in about 20 lines of code. The point is to let the computer do the repetition while you sit back and watch. Tasks:1)Arrays and LoopsLocate the “Simplifying Programs with Arrays” section in the Little SAS Book which is section 3.11 in the fifth edition. Using only the data for 1988, follow the example to define an array that designates the WORDx variables, loops across all array cells, and assigns missing values. Check your results with appropriate tabulations. 2)Macro with ParametersUsing the “Adding Parameters to Macros” section (7.4 in the fifth edition), convert the array developed in (1) to a macro which substitutes in 1988 for a generic year variable. That is, instruct the macro to run on the 1988 data. Pay special attention to the macro commands that always begin with “%”. 3)Macro that Loops across Multiple YearsOnce you have your macro working for 1988, add code that instructs the macro to parse across all years of available data. This is not documented in the book. The basic form of the macro loop looks like this: %macro macroname; %do i = start_value %to end value %by increment ; %callmacro(var=&i) %end; %mend macroname; Where macroname = a name you give the macro that runs across years. The loop start value is the first value you want to use for this loop (e.g., 1988), end value is the last value (end year), and increment is how much the start value is increased on each iteration. It’s easy for the period when GSS data were collected every year. The increment is one (the default). But, you need to figure out what to do when the survey becomes biennial (not exactly rocket science, but you can do it). Look back at the codebook page noted above for a reminder of what years the WORDSUM data were collected. Where I have inserted call macro, you put the name of the macro you developed in step 2. The step 3 loop will keep running that macro over and over until all years have been parsed. Hint: When I did this step I embedded three do loops in the macro due to variations in year increments and skip patterns. Gold star to someone(s) who can figure out a way to do it in fewer loops. ***My Code*** libname in "C:\Users\kim_trevino1\Desktop\Advanced STATS 2020"; run; *options symbolgen; Data work.worddata2; set in.gss7218_r3(Keep= Year ID marital wrkstat hrs1 age educ region sex race rincome income occ10 prestg10 indus10 size worda wordB wordc wordd worde wordf wordg wordh wordi wordj wordsum wtssall); Array worddata (10)$ worda --wordj; /*wordsum not included because 9 is a value and not missin*/ Do i= 1 to 10; if worddata(i)in (9,-1)then worddata (i)=.; /*Where year=1988*/ end; run; Proc freq data=work.worddata2; Table year*worda--wordsum; weight wtssall; Run; Data work.worddatamacro; set work.worddata2; run; %macro wordscore(year); proc sort data=work.worddatamacro; by year; run; *read following data; proc freq data=work.worddatamacro; where year=&year.; tables worda--wordsum; title 'Word Score for &year.'; run; %mend wordscore; data worddata3; set work.worddatamacro;Run; %wordscore(1988); %macro wordscore (year); %Do i=1974 %to 1984 %by 2; %wordscore(year=&i.) %end; %Do i=1987 %to 1994 %by 1; %wordscore(year=&i.) %end; %Do i=1996 %to 2000 %by 2; %wordscore(year=&i.) %end; %Do i=2004 %to 2018 %by 2; %wordscore(year=&i.) %end; %mend wordscore; %wordscore; Ods rtf close; run;
... View more