我有一个长格式的SAS数据集。干预计划从2014年春季学期开始,一直持续到2017年春季学期。所以有7个学期(2014年春季和秋季,2015年春季和秋季,2016年春季和秋季,2017年春季)。
不是每个人都参加了所有7个学期。有些人参加了一次而且从未回来过,有些人参加过两次以上,但不一定是两个学期。
所以每个人都有不同数量的病例。例如,对于参加过两次的人来说,有两行,有一些有5次参与有5行。
由于某种原因,我希望每个人在数据集中都有7行。 在SAS中执行此操作的最佳编程方法是什么?
我真的很感激任何建议!
答案 0 :(得分:0)
PROC EXPAND可能是最直接的方法,虽然它有一个限制,它不会推断超出观察范围的开始/结束,并且它期望定期间隔(或更多的工作来定义间隔)。
proc expand data=your_data out=expanded_data from=semiyear extrapolate method=none;
by student;
id semester_date;
run;
这依赖于semester_date是一个日期变量,通常对应于每个半年的开始。
在这种情况下,您可以更轻松地使用printmiss
中的proc tabulate
选项,这样可以非常轻松地生成表格。
ods output table=out_table;
proc tabulate data=your_data;
class student semester;
tables student,semester/printmiss misstext=' ';
run;
ods output close;
然后将其合并回主数据集,这将为每个学生*学期组合提供一行。