2017-05-26 48 views
-1

我有一个长格式的SAS数据集。干预计划从2014年春季开始,直至2017年春季学期。所以共有7个学期(2014年春季,2015年春季,2016年春季,2017年春季)。在SAS中按组添加案例

不是每个人都参加了所有7个学期。一些参加了一次,从未回来,有些参加了两次以上,但不一定是两个学期的低。

所以每个人都有不同数量的病例。对于两次参加的人,例如有2行,有5个参与者有5行。

我想每个人在数据集中有7行出于某种原因。 什么可能是编程在SAS中执行此操作的最佳方式?

我真的很感激任何建议!

+0

你是说你想要表格有七行,每学期一个,然后是每个人的专栏? –

+0

在数据集中,我需要每个人七行。据我所知,我不想为每个人提供专栏。数据集将如下所示:2014年春季/ 2014年秋季/ 2015年春季/ 2015年秋季/ 2016年春季/ 2016年秋季/ 2017年春季。每学期将有变量列。是否有意义?我不知道如何在这个网站上画一张桌子......!抱歉! – Brainupgraded

回答

0

PROC EXPAND可能是最直接的方式来做到这一点,虽然它有一个局限性,即它不会超出观察到的范围的开始/结束的外推,并且它需要定期的间隔(或者需要更多的工作来定义间隔)。

proc expand data=your_data out=expanded_data from=semiyear extrapolate method=none; 
    by student; 
    id semester_date; 
run; 

这依赖于semester_date是一个日期变量,通常对应于每个半年的开始。

也许在这种情况下更容易,您可以使用proc tabulate中的printmiss选项,这将很容易地生成表格。

ods output table=out_table; 
proc tabulate data=your_data; 
    class student semester; 
    tables student,semester/printmiss misstext=' '; 
run; 
ods output close; 

然后将其重新合并到主数据集中,这将对每个学生*学期组合都有一行。

+0

谢谢!有人提出了使用Proc SQL的语法,我发现它非常简单。但我仍然非常感谢你的工作!我不知道Proc Expand,我通常不使用Proc Tabulate,所以我学到了很多东西。我将很快发布解决方案。 – Brainupgraded