/* Richard A. DeVenezia * www.devenezia.com * * Add a counter variable to a table that increments * on every other row. * * Similar to content originally posted to SAS-L on June 14, 2003 */ /* * Fake data */ data foo; length category x 8; category = 0; seed = 32; do i = 1 to 1000; x + 1 + int(10 * ranuni(seed)); if ranuni (seed) < 0.10 then category+1; output; end; keep category x; run; /* * Counter goes up one every other row */ data bar; set foo (drop=category); retain step 1; counter + step; step = (1-step); drop step; run; /* * Counter goes up one every other row within by group */ data bar2; set foo; by category; retain step; if first.category then do; counter = 0; step = 1; end; counter + step; step = (1-step); drop step; run; /* * Counter goes up one every other N rows within bygroup */ data barN; set foo; by category; retain step; retain every 3; if first.category then do; counter = 1; step = 0; end; step + 1; counter + (step > every); if step > every then step = 1; drop step every; run; title; footnote; options nonumber nodate nocenter formdlim = ' '; ods listing; dm 'clear output' output; proc print data=bar(obs=12); title 'Counter increments every other row' ; run; proc print data=bar2(obs=12); title 'Counter increments every other row within category'; by category; id category; run; proc print data=barN(obs=12); title 'Counter increments every 3rd row within category'; by category; id category; run;