2015-04-06 94 views
0

我有大学生的纵向数据集,其中包含各种与人口统计和绩效相关的信息。我对研究登记状态感兴趣,但该数据集不包含“未登记”的信息(即如果学生离开了一个学期,然后返回)。我需要一种方法来创建一个观察这个“未注册”的时间段。数据集的结构如下:创建缺少的观察

Student_ID Enrollement_Status Year Semester Variable1 Varible2  
    1     1   2011  1   
    1     2   2011  2 
    1     1   2012  2 
    2     2   2011  1 
    2     2   2011  2 

我需要student_id数据1的观察,用(/ 1和两个indicatate部分时间满时间)的0 Enrollement_Status,在年份= 2012的学期= 1。这一年是根据学年(而不是日历年)计算的,所以对于秋季/春季来说都是一样的。我还需要复制Variable1 - Variablen的信息,因为它不会及时更改。可能有一个时间超过一个学期,所以在这种情况下,我需要两个(或更多)观察每学期没有注册的学生。

谢谢! Brian

+0

请问您有在这里发帖之前在此的尝试吗?有一些问题涉及类似的概念。例如,[This one](http://stackoverflow.com/questions/25646976/creating-all-possible-combinations-in-a-table-using-sas/25647910#25647910)。 [This one also](http://stackoverflow.com/questions/19422954/extend-observations-for-all-years-in-sequence/19429677#19429677)。你确切的问题可能需要一些小的修改,但概念在那里。 – Joe 2015-04-06 16:38:11

回答

1

您可以使用proc sql来做到这一点。这个想法是生成所有你想要的行 - 这将是所有学生和所有年/学期组合。使用left join来引入现有信息。无以伦比列将NULL

select s.student_id, coalesce(ss.Enrollement_Status) as Enrollement_Status, 
     ys.year, ys.semester, s.variable1, s.variable2 
from (select distinct year, semester from students) ys cross join 
    (select distinct student_id from students) s left join 
    students ss 
    on ss.year = ys.year and ss.semester = ys.semester and 
     ss.student_id = s.student_id; 
0
Data STUDENTS; 
    Input Student_ID Enrollment_Status Year Semester; 
    Datalines; 
1 1 2011 1 
1 2 2011 2 
1 1 2012 2 
2 2 2011 1 
2 2 2011 2 
; 
Run; 

了解了SPARSE(PAPER)从@乔的评论。它似乎在做所有可能的学期创建数据集的诀窍。

proc freq data=STUDENTS noprint; 
tables student_id*year*semester/sparse out=all(drop=percent count); 
run; 

然后只要加入两个数据集来填补空白。不是那样棘手,@ GordonLinoff的回答,所以如果我错过了一些东西,我一直有兴趣了解更多关于SQL

Proc Sql; 
Create table WANT as 
select a.student_id 
, CASE 
     When s.Enrollment_Status=. THEN 0 
     ELSE s.Enrollment_Status 
     END as Enrollment_Status 
, a.year, a.semester 
from all a left join students s on a.student_id=s.student_id and a.year=s.year and a.semester=s.semester 
; 
Quit; 
+0

谢谢! Proc SQL对此非常有用。我想我需要使用数据步骤。欣赏反馈。 – 2015-04-07 01:54:22