我正在参加SAS课程,并有一个项目可以完成。当然,我并不是在寻找确切的答案(尽管那样会很好),但是我们真的很感激正确的方向。使用SAS Macro创建间隔
问题是编写一个宏,该宏创建年龄从一个人年龄的年龄组。给出的代码是:
data a ;
infile in1 ;
input name $ age ;
if 30 le age < 33 then agegrp = 30 ;
else if 33 le age < 36 then agegrp = 33 ;
else if 36 le age < 39 then agegrp = 36 ;
else if 39 le age < 42 then agegrp = 39 ;
else if 42 le age < 45 then agegrp = 42 ;
else if 45 le age < 48 then agegrp = 45 ;
else if 48 le age < 51 then agegrp = 48 ;
else if 51 le age < 54 then agegrp = 51 ;
else if 54 le age < 57 then agegrp = 54 ;
else if 57 le age then agegrp = 57 ;
我的工作是编写一个生成这些if-then/else语句的SAS宏。这是我到目前为止。我意识到这不会运行,但我想要弄清楚一些事情,告诉你们这些任务有多远。
options ls=78 formdlim=' ' ;
%MACRO CODEIT(start= , stop= , count= , old= , new=);
%let x=&start;
%let y=%eval(&start+&count);
if &start
%do x=&start+&count %to &stop %by &count ;
<= &old < &x then &new=&start ;
%let start=&x ;
else if &start
%end ;
<= &old then &new=&start ;
%MEND
data a ;
input age ;
datalines;
30 31 32 33 34 37
38 39 39 41 42 45
46 46 47 49 50 50
52 53 54 55 56 57
%CODEIT(start=30, stop=57, count=3, old=0, new=0);
我非常感谢你提前给你提供的所有帮助。
是否需要成为宏?这通常不是实现这一目标的最佳实践。 – Joe
它需要是一个宏。该宏应该能够获取人们年龄的数据集,并根据数据中的年龄范围生成不同范围的if-then/else语句。非常感谢您的快速回复。 – William
我希望这位教授至少在“这是可怕的编程习惯,但是我为了学习的目的而要求你这么做”之前写过? :) – Joe