<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Macro is doing nothing in SAS Procedures</title>
    <link>https://communities.sas.com/t5/SAS-Procedures/Macro-is-doing-nothing/m-p/13636#M2037</link>
    <description>I took the do out but now it is doing nothing. can you help me figure out why.&lt;BR /&gt;
&lt;BR /&gt;
Thanks for any help&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
%MACRO CreateMplusInput(filesave, filename, saslibname, Qname, dataname, IDname, itemstem, itemlist, numitem, ordervar, maxitemorder, attstem, attcat, numatt, &lt;BR /&gt;
numclass, structon, structorder, loosen, processors);&lt;BR /&gt;
&lt;BR /&gt;
options mprint mlogic symbolgen;&lt;BR /&gt;
%let num_reps=1;&lt;BR /&gt;
&lt;BR /&gt;
%let num_skills=5;&lt;BR /&gt;
%let datafile=dat&amp;amp;seed.;&lt;BR /&gt;
%let numitem=%eval(2**&amp;amp;num_skills-1);&lt;BR /&gt;
%let numclass=%eval(2**&amp;amp;num_skills);&lt;BR /&gt;
%let num_students=100;&lt;BR /&gt;
%let IDname=num_student; &lt;BR /&gt;
&lt;BR /&gt;
* CHANGED Import original data into work library, save as .dat file for Mplus;&lt;BR /&gt;
&lt;BR /&gt;
data _NULL_;&lt;BR /&gt;
	set sas_cdm.student&amp;amp;seed;        &lt;BR /&gt;
	file "C:\CDM\&amp;amp;datafile..dat";&lt;BR /&gt;
	put  student_num Combinations question1-question&amp;amp;num_item ;&lt;BR /&gt;
RUN;&lt;BR /&gt;
&lt;BR /&gt;
******************************************************************************&lt;BR /&gt;
**********       		  Data Manipulation: 						  ********&lt;BR /&gt;
**********		Getting Q Matrix and Attribute Patterns	 			  ********&lt;BR /&gt;
******************************************************************************;&lt;BR /&gt;
*CHANGED Import original Q_MATRIX into work library;&lt;BR /&gt;
*****************************CHANGE ALL 3 TO &amp;amp;NUM_SKILLS****************;&lt;BR /&gt;
DATA Qmatrix; &lt;BR /&gt;
	set sas_cdm.Q_Matrix;&lt;BR /&gt;
* Renaming attributes to common format;&lt;BR /&gt;
	array skills{3} skills1-skills3;&lt;BR /&gt;
	ARRAY new(3) itematt1-itematt3;&lt;BR /&gt;
		DO i=1 TO 3; new(i)=skills(i); END;&lt;BR /&gt;
item= _N_;&lt;BR /&gt;
DROP i skills1-skills3;&lt;BR /&gt;
run;&lt;BR /&gt;
&lt;BR /&gt;
**************************END OF CHANGE ALL 3 TO &amp;amp;NUM_SKILLS**********;&lt;BR /&gt;
*********************************************************************************&lt;BR /&gt;
*Saving model order per item as macro variables;&lt;BR /&gt;
*********************************************************************************;&lt;BR /&gt;
***************CHANGE ALL 7 TO &amp;amp;NUMITEM*****************;&lt;BR /&gt;
%MACRO SaveItemOrder;&lt;BR /&gt;
%let ordervar=3;&lt;BR /&gt;
DATA _NULL_;&lt;BR /&gt;
/* Datasets to draw values from*/&lt;BR /&gt;
	%LET dataQmatrix=%SYSFUNC(OPEN(work.Qmatrix,i));&lt;BR /&gt;
		%DO i=1 %TO 7;&lt;BR /&gt;
/* Assign new macro variables as global*/&lt;BR /&gt;
			%GLOBAL itemorder&amp;amp;i;&lt;BR /&gt;
/* Gets entire row of data*/&lt;BR /&gt;
			%LET row=%SYSFUNC(FETCHOBS(&amp;amp;dataQmatrix,&amp;amp;i));&lt;BR /&gt;
/* Grabs specific value for threshold from that row*/&lt;BR /&gt;
			%LET item&amp;amp;i.=%SYSFUNC(GETVARN(&amp;amp;dataQmatrix.,&lt;BR /&gt;
					     %SYSFUNC(VARNUM(&amp;amp;dataQmatrix.,&amp;amp;ordervar.))));&lt;BR /&gt;
/* Transferring value to global macro, and checking via log;*/&lt;BR /&gt;
			%LET itemorder&amp;amp;i. = &amp;amp;&amp;amp;item&amp;amp;i.; &lt;BR /&gt;
		    %PUT itemorder&amp;amp;i. &amp;amp;&amp;amp;itemorder&amp;amp;i.; &lt;BR /&gt;
		%END;&lt;BR /&gt;
	/* Close dataset used in program;*/&lt;BR /&gt;
	%LET dataQmatrix=%SYSFUNC(CLOSE(&amp;amp;dataQmatrix.));&lt;BR /&gt;
RUN;&lt;BR /&gt;
%MEND;&lt;BR /&gt;
%SaveItemOrder;&lt;BR /&gt;
&lt;BR /&gt;
***************END OF CHANGE ALL 7 TO &amp;amp;NUMITEM*****************;&lt;BR /&gt;
*********************************FIX OR CHANGE LATER**************;&lt;BR /&gt;
/**** Steps in creating a class to pattern table:&lt;BR /&gt;
* MACRO Classpattern:&lt;BR /&gt;
* Creates an initial pattern of as many 0s and 1s in a row as needed&lt;BR /&gt;
* Copies that pattern into separate datasets as needed&lt;BR /&gt;
* Concatentates (then deletes) the separate datasets&lt;BR /&gt;
* Result is one dataset per attribute with enough rows for all classes&lt;BR /&gt;
* MACRO MergeIt:&lt;BR /&gt;
* Merges (then deletes) datasets from each attribute together; */&lt;BR /&gt;
&lt;BR /&gt;
%MACRO ClassPattern;&lt;BR /&gt;
%global numatt;&lt;BR /&gt;
%LET divisor=2;&lt;BR /&gt;
%LET repeat = 1;&lt;BR /&gt;
%LET numclass= 8; /*TAKE OUT; */&lt;BR /&gt;
%LET totclass = &amp;amp;numclass.;&lt;BR /&gt;
&lt;BR /&gt;
/*____________________________GET %LET NUMITEM= 7 OUT_______________________________ */&lt;BR /&gt;
%LET NUMITEM= 7;&lt;BR /&gt;
%LET numatt = 3;&lt;BR /&gt;
%DO a=1 %TO &amp;amp;numatt.;&lt;BR /&gt;
   %DO r=1 %TO %EVAL(&amp;amp;repeat.);&lt;BR /&gt;
       DATA att&amp;amp;a.&amp;amp;r.;&lt;BR /&gt;
               DO c=1 TO &amp;amp;totclass.;&lt;BR /&gt;
                   IF c LE (&amp;amp;totclass./&amp;amp;divisor.) THEN classatt&amp;amp;a.=0; ELSE classatt&amp;amp;a.=1;&lt;BR /&gt;
                   OUTPUT;&lt;BR /&gt;
               END; DROP c;&lt;BR /&gt;
           run;&lt;BR /&gt;
           %LET repeat = %EVAL(&amp;amp;repeat.+1);&lt;BR /&gt;
       %END;&lt;BR /&gt;
       %IF &amp;amp;a.=1 %THEN %LET order = 1; %ELSE %LET order=%EVAL(&amp;amp;order.*2);&lt;BR /&gt;
       DATA att&amp;amp;a.; SET %DO loop=1 %TO &amp;amp;order.; Att&amp;amp;a.&amp;amp;loop. %END; ; run;&lt;BR /&gt;
       PROC DATASETS LIB=WORK NOLIST; DELETE %DO loop=1 %TO &amp;amp;order.; Att&amp;amp;a.&amp;amp;loop. %END; ;&lt;BR /&gt;
       RUN; QUIT;&lt;BR /&gt;
       %LET totclass = %EVAL(&amp;amp;totclass./2);&lt;BR /&gt;
   %END;&lt;BR /&gt;
%MEND ClassPattern;&lt;BR /&gt;
%ClassPattern;&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
%MACRO MergeIt;&lt;BR /&gt;
DATA classpattern; RETAIN class; MERGE&lt;BR /&gt;
   %DO a=1 %TO &amp;amp;numatt.; Att&amp;amp;a. %END; ;&lt;BR /&gt;
   class = _N_; RUN;&lt;BR /&gt;
PROC DATASETS LIB=WORK NOLIST; DELETE %DO a=1 %TO &amp;amp;numatt.; Att&amp;amp;a. %END; ;&lt;BR /&gt;
RUN; QUIT;&lt;BR /&gt;
%MEND;&lt;BR /&gt;
%MergeIt;&lt;BR /&gt;
&lt;BR /&gt;
/***********************ABOVE MIGHT NOT HAVE TO DO;**************************/&lt;BR /&gt;
&lt;BR /&gt;
/***********************CHANGE 8 TO &amp;amp;numclass. AND 7 TO &amp;amp;numitem.************/&lt;BR /&gt;
/* Creating item*attribute kernal table from classpattern matrix and Q matrix*/&lt;BR /&gt;
/* Result is one row per class per item*/&lt;BR /&gt;
DATA kernel; &lt;BR /&gt;
	DO class=1 TO 8;&lt;BR /&gt;
		DO item=1 TO 7;&lt;BR /&gt;
			class=class; item=item; OUTPUT;&lt;BR /&gt;
		END;&lt;BR /&gt;
	END;&lt;BR /&gt;
RUN;&lt;BR /&gt;
******************END OF CHANGE 8 TO &amp;amp;numclass. AND 7 TO &amp;amp;numitem.********************;&lt;BR /&gt;
DATA kernel; MERGE kernel classpattern; BY class; RUN;&lt;BR /&gt;
PROC SORT DATA=kernel; BY item class; RUN;&lt;BR /&gt;
DATA kernel; MERGE kernel Qmatrix; BY item; RUN;&lt;BR /&gt;
&lt;BR /&gt;
* Scoring by class and item to create kernel threshold values;&lt;BR /&gt;
* Result is set of variables called "scoreatt" to be activated&lt;BR /&gt;
  if the item requires the attribute AND the class has it;&lt;BR /&gt;
DATA kernel; SET kernel;&lt;BR /&gt;
	ARRAY aclass(&amp;amp;numatt.) classatt1-classatt&amp;amp;numatt.;&lt;BR /&gt;
	ARRAY aitem(&amp;amp;numatt.)  itematt1-itematt&amp;amp;numatt.;&lt;BR /&gt;
	ARRAY ascore(&amp;amp;numatt.) scoreatt1-scoreatt&amp;amp;numatt.;&lt;BR /&gt;
	DO i=1 TO &amp;amp;numatt.;&lt;BR /&gt;
		IF aclass(i)=1 AND aitem(i)=1 THEN ascore(i)=1; ELSE ascore(i)=0;&lt;BR /&gt;
	END; DROP i;&lt;BR /&gt;
RUN;&lt;BR /&gt;
* Creating single variables that hold the "scoreatt" and attribute patterns;&lt;BR /&gt;
DATA kernel; LENGTH scorepattern $10 attpattern $&amp;amp;numatt.; SET kernel; &lt;BR /&gt;
	scorepattern = CAT(OF item scoreatt1-scoreatt&amp;amp;numatt.);&lt;BR /&gt;
	attpattern = CAT(OF scoreatt1-scoreatt&amp;amp;numatt.); &lt;BR /&gt;
RUN;&lt;BR /&gt;
PROC SORT DATA=kernel; BY item scorepattern; RUN;&lt;BR /&gt;
* Creates count variable for whether each "scoreatt" is unique&lt;BR /&gt;
  to an item to create a new threshold index as needed;&lt;BR /&gt;
DATA kernel; SET kernel; BY item scorepattern; RETAIN thresh;&lt;BR /&gt;
		IF FIRST.Item THEN thresh=1;&lt;BR /&gt;
		IF scorepattern=LAG1(scorepattern) THEN thresh=thresh; &lt;BR /&gt;
		ELSE thresh=thresh+1;&lt;BR /&gt;
RUN;&lt;BR /&gt;
* The threshold count is one unit too high, so this FIXES it;&lt;BR /&gt;
DATA kernel; RETAIN class item scorepattern thresh; SET kernel; &lt;BR /&gt;
	thresh=thresh-1;&lt;BR /&gt;
RUN;&lt;BR /&gt;
PROC SORT DATA=kernel; BY item class; RUN;&lt;BR /&gt;
%mend;&lt;BR /&gt;
%CreateMplus;</description>
    <pubDate>Sat, 19 Feb 2011 22:46:34 GMT</pubDate>
    <dc:creator>R_A_G_</dc:creator>
    <dc:date>2011-02-19T22:46:34Z</dc:date>
    <item>
      <title>Macro is doing nothing</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Macro-is-doing-nothing/m-p/13636#M2037</link>
      <description>I took the do out but now it is doing nothing. can you help me figure out why.&lt;BR /&gt;
&lt;BR /&gt;
Thanks for any help&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
%MACRO CreateMplusInput(filesave, filename, saslibname, Qname, dataname, IDname, itemstem, itemlist, numitem, ordervar, maxitemorder, attstem, attcat, numatt, &lt;BR /&gt;
numclass, structon, structorder, loosen, processors);&lt;BR /&gt;
&lt;BR /&gt;
options mprint mlogic symbolgen;&lt;BR /&gt;
%let num_reps=1;&lt;BR /&gt;
&lt;BR /&gt;
%let num_skills=5;&lt;BR /&gt;
%let datafile=dat&amp;amp;seed.;&lt;BR /&gt;
%let numitem=%eval(2**&amp;amp;num_skills-1);&lt;BR /&gt;
%let numclass=%eval(2**&amp;amp;num_skills);&lt;BR /&gt;
%let num_students=100;&lt;BR /&gt;
%let IDname=num_student; &lt;BR /&gt;
&lt;BR /&gt;
* CHANGED Import original data into work library, save as .dat file for Mplus;&lt;BR /&gt;
&lt;BR /&gt;
data _NULL_;&lt;BR /&gt;
	set sas_cdm.student&amp;amp;seed;        &lt;BR /&gt;
	file "C:\CDM\&amp;amp;datafile..dat";&lt;BR /&gt;
	put  student_num Combinations question1-question&amp;amp;num_item ;&lt;BR /&gt;
RUN;&lt;BR /&gt;
&lt;BR /&gt;
******************************************************************************&lt;BR /&gt;
**********       		  Data Manipulation: 						  ********&lt;BR /&gt;
**********		Getting Q Matrix and Attribute Patterns	 			  ********&lt;BR /&gt;
******************************************************************************;&lt;BR /&gt;
*CHANGED Import original Q_MATRIX into work library;&lt;BR /&gt;
*****************************CHANGE ALL 3 TO &amp;amp;NUM_SKILLS****************;&lt;BR /&gt;
DATA Qmatrix; &lt;BR /&gt;
	set sas_cdm.Q_Matrix;&lt;BR /&gt;
* Renaming attributes to common format;&lt;BR /&gt;
	array skills{3} skills1-skills3;&lt;BR /&gt;
	ARRAY new(3) itematt1-itematt3;&lt;BR /&gt;
		DO i=1 TO 3; new(i)=skills(i); END;&lt;BR /&gt;
item= _N_;&lt;BR /&gt;
DROP i skills1-skills3;&lt;BR /&gt;
run;&lt;BR /&gt;
&lt;BR /&gt;
**************************END OF CHANGE ALL 3 TO &amp;amp;NUM_SKILLS**********;&lt;BR /&gt;
*********************************************************************************&lt;BR /&gt;
*Saving model order per item as macro variables;&lt;BR /&gt;
*********************************************************************************;&lt;BR /&gt;
***************CHANGE ALL 7 TO &amp;amp;NUMITEM*****************;&lt;BR /&gt;
%MACRO SaveItemOrder;&lt;BR /&gt;
%let ordervar=3;&lt;BR /&gt;
DATA _NULL_;&lt;BR /&gt;
/* Datasets to draw values from*/&lt;BR /&gt;
	%LET dataQmatrix=%SYSFUNC(OPEN(work.Qmatrix,i));&lt;BR /&gt;
		%DO i=1 %TO 7;&lt;BR /&gt;
/* Assign new macro variables as global*/&lt;BR /&gt;
			%GLOBAL itemorder&amp;amp;i;&lt;BR /&gt;
/* Gets entire row of data*/&lt;BR /&gt;
			%LET row=%SYSFUNC(FETCHOBS(&amp;amp;dataQmatrix,&amp;amp;i));&lt;BR /&gt;
/* Grabs specific value for threshold from that row*/&lt;BR /&gt;
			%LET item&amp;amp;i.=%SYSFUNC(GETVARN(&amp;amp;dataQmatrix.,&lt;BR /&gt;
					     %SYSFUNC(VARNUM(&amp;amp;dataQmatrix.,&amp;amp;ordervar.))));&lt;BR /&gt;
/* Transferring value to global macro, and checking via log;*/&lt;BR /&gt;
			%LET itemorder&amp;amp;i. = &amp;amp;&amp;amp;item&amp;amp;i.; &lt;BR /&gt;
		    %PUT itemorder&amp;amp;i. &amp;amp;&amp;amp;itemorder&amp;amp;i.; &lt;BR /&gt;
		%END;&lt;BR /&gt;
	/* Close dataset used in program;*/&lt;BR /&gt;
	%LET dataQmatrix=%SYSFUNC(CLOSE(&amp;amp;dataQmatrix.));&lt;BR /&gt;
RUN;&lt;BR /&gt;
%MEND;&lt;BR /&gt;
%SaveItemOrder;&lt;BR /&gt;
&lt;BR /&gt;
***************END OF CHANGE ALL 7 TO &amp;amp;NUMITEM*****************;&lt;BR /&gt;
*********************************FIX OR CHANGE LATER**************;&lt;BR /&gt;
/**** Steps in creating a class to pattern table:&lt;BR /&gt;
* MACRO Classpattern:&lt;BR /&gt;
* Creates an initial pattern of as many 0s and 1s in a row as needed&lt;BR /&gt;
* Copies that pattern into separate datasets as needed&lt;BR /&gt;
* Concatentates (then deletes) the separate datasets&lt;BR /&gt;
* Result is one dataset per attribute with enough rows for all classes&lt;BR /&gt;
* MACRO MergeIt:&lt;BR /&gt;
* Merges (then deletes) datasets from each attribute together; */&lt;BR /&gt;
&lt;BR /&gt;
%MACRO ClassPattern;&lt;BR /&gt;
%global numatt;&lt;BR /&gt;
%LET divisor=2;&lt;BR /&gt;
%LET repeat = 1;&lt;BR /&gt;
%LET numclass= 8; /*TAKE OUT; */&lt;BR /&gt;
%LET totclass = &amp;amp;numclass.;&lt;BR /&gt;
&lt;BR /&gt;
/*____________________________GET %LET NUMITEM= 7 OUT_______________________________ */&lt;BR /&gt;
%LET NUMITEM= 7;&lt;BR /&gt;
%LET numatt = 3;&lt;BR /&gt;
%DO a=1 %TO &amp;amp;numatt.;&lt;BR /&gt;
   %DO r=1 %TO %EVAL(&amp;amp;repeat.);&lt;BR /&gt;
       DATA att&amp;amp;a.&amp;amp;r.;&lt;BR /&gt;
               DO c=1 TO &amp;amp;totclass.;&lt;BR /&gt;
                   IF c LE (&amp;amp;totclass./&amp;amp;divisor.) THEN classatt&amp;amp;a.=0; ELSE classatt&amp;amp;a.=1;&lt;BR /&gt;
                   OUTPUT;&lt;BR /&gt;
               END; DROP c;&lt;BR /&gt;
           run;&lt;BR /&gt;
           %LET repeat = %EVAL(&amp;amp;repeat.+1);&lt;BR /&gt;
       %END;&lt;BR /&gt;
       %IF &amp;amp;a.=1 %THEN %LET order = 1; %ELSE %LET order=%EVAL(&amp;amp;order.*2);&lt;BR /&gt;
       DATA att&amp;amp;a.; SET %DO loop=1 %TO &amp;amp;order.; Att&amp;amp;a.&amp;amp;loop. %END; ; run;&lt;BR /&gt;
       PROC DATASETS LIB=WORK NOLIST; DELETE %DO loop=1 %TO &amp;amp;order.; Att&amp;amp;a.&amp;amp;loop. %END; ;&lt;BR /&gt;
       RUN; QUIT;&lt;BR /&gt;
       %LET totclass = %EVAL(&amp;amp;totclass./2);&lt;BR /&gt;
   %END;&lt;BR /&gt;
%MEND ClassPattern;&lt;BR /&gt;
%ClassPattern;&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
%MACRO MergeIt;&lt;BR /&gt;
DATA classpattern; RETAIN class; MERGE&lt;BR /&gt;
   %DO a=1 %TO &amp;amp;numatt.; Att&amp;amp;a. %END; ;&lt;BR /&gt;
   class = _N_; RUN;&lt;BR /&gt;
PROC DATASETS LIB=WORK NOLIST; DELETE %DO a=1 %TO &amp;amp;numatt.; Att&amp;amp;a. %END; ;&lt;BR /&gt;
RUN; QUIT;&lt;BR /&gt;
%MEND;&lt;BR /&gt;
%MergeIt;&lt;BR /&gt;
&lt;BR /&gt;
/***********************ABOVE MIGHT NOT HAVE TO DO;**************************/&lt;BR /&gt;
&lt;BR /&gt;
/***********************CHANGE 8 TO &amp;amp;numclass. AND 7 TO &amp;amp;numitem.************/&lt;BR /&gt;
/* Creating item*attribute kernal table from classpattern matrix and Q matrix*/&lt;BR /&gt;
/* Result is one row per class per item*/&lt;BR /&gt;
DATA kernel; &lt;BR /&gt;
	DO class=1 TO 8;&lt;BR /&gt;
		DO item=1 TO 7;&lt;BR /&gt;
			class=class; item=item; OUTPUT;&lt;BR /&gt;
		END;&lt;BR /&gt;
	END;&lt;BR /&gt;
RUN;&lt;BR /&gt;
******************END OF CHANGE 8 TO &amp;amp;numclass. AND 7 TO &amp;amp;numitem.********************;&lt;BR /&gt;
DATA kernel; MERGE kernel classpattern; BY class; RUN;&lt;BR /&gt;
PROC SORT DATA=kernel; BY item class; RUN;&lt;BR /&gt;
DATA kernel; MERGE kernel Qmatrix; BY item; RUN;&lt;BR /&gt;
&lt;BR /&gt;
* Scoring by class and item to create kernel threshold values;&lt;BR /&gt;
* Result is set of variables called "scoreatt" to be activated&lt;BR /&gt;
  if the item requires the attribute AND the class has it;&lt;BR /&gt;
DATA kernel; SET kernel;&lt;BR /&gt;
	ARRAY aclass(&amp;amp;numatt.) classatt1-classatt&amp;amp;numatt.;&lt;BR /&gt;
	ARRAY aitem(&amp;amp;numatt.)  itematt1-itematt&amp;amp;numatt.;&lt;BR /&gt;
	ARRAY ascore(&amp;amp;numatt.) scoreatt1-scoreatt&amp;amp;numatt.;&lt;BR /&gt;
	DO i=1 TO &amp;amp;numatt.;&lt;BR /&gt;
		IF aclass(i)=1 AND aitem(i)=1 THEN ascore(i)=1; ELSE ascore(i)=0;&lt;BR /&gt;
	END; DROP i;&lt;BR /&gt;
RUN;&lt;BR /&gt;
* Creating single variables that hold the "scoreatt" and attribute patterns;&lt;BR /&gt;
DATA kernel; LENGTH scorepattern $10 attpattern $&amp;amp;numatt.; SET kernel; &lt;BR /&gt;
	scorepattern = CAT(OF item scoreatt1-scoreatt&amp;amp;numatt.);&lt;BR /&gt;
	attpattern = CAT(OF scoreatt1-scoreatt&amp;amp;numatt.); &lt;BR /&gt;
RUN;&lt;BR /&gt;
PROC SORT DATA=kernel; BY item scorepattern; RUN;&lt;BR /&gt;
* Creates count variable for whether each "scoreatt" is unique&lt;BR /&gt;
  to an item to create a new threshold index as needed;&lt;BR /&gt;
DATA kernel; SET kernel; BY item scorepattern; RETAIN thresh;&lt;BR /&gt;
		IF FIRST.Item THEN thresh=1;&lt;BR /&gt;
		IF scorepattern=LAG1(scorepattern) THEN thresh=thresh; &lt;BR /&gt;
		ELSE thresh=thresh+1;&lt;BR /&gt;
RUN;&lt;BR /&gt;
* The threshold count is one unit too high, so this FIXES it;&lt;BR /&gt;
DATA kernel; RETAIN class item scorepattern thresh; SET kernel; &lt;BR /&gt;
	thresh=thresh-1;&lt;BR /&gt;
RUN;&lt;BR /&gt;
PROC SORT DATA=kernel; BY item class; RUN;&lt;BR /&gt;
%mend;&lt;BR /&gt;
%CreateMplus;</description>
      <pubDate>Sat, 19 Feb 2011 22:46:34 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Macro-is-doing-nothing/m-p/13636#M2037</guid>
      <dc:creator>R_A_G_</dc:creator>
      <dc:date>2011-02-19T22:46:34Z</dc:date>
    </item>
    <item>
      <title>Re: Macro is doing nothing</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Macro-is-doing-nothing/m-p/13637#M2038</link>
      <description>The SAS log would be much more useful than seeing the SAS program code.&lt;BR /&gt;
&lt;BR /&gt;
Here's the OPTIONS statement you want to use to get the most diagnostic output:&lt;BR /&gt;
&lt;BR /&gt;
OPTIONS SOURCE SOURCE2 MACROGEN SYMBOLGEN MPRINT /* MLOGIC */;&lt;BR /&gt;
&lt;BR /&gt;
Scott Barry&lt;BR /&gt;
SBBWorks, Inc.</description>
      <pubDate>Mon, 21 Feb 2011 02:39:30 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Macro-is-doing-nothing/m-p/13637#M2038</guid>
      <dc:creator>sbb</dc:creator>
      <dc:date>2011-02-21T02:39:30Z</dc:date>
    </item>
  </channel>
</rss>

