我们遇到的问题是人们没有及时提交医院访问信息。我试图破解访问日期后(平均)医院将提交该日期所有访问的信息。
尝试从当前数据集创建一个包含3个相关字段的表:Unique_Visiting_ID,Visit_Date,Date_Created,Chief_Complaint。
可以有多个行具有相同的unique_visiting_ID,unique_visiting_id是单个患者访问的唯一标识符。 Visit_date是访问日期。 date_created变量告诉我们向我们发送一行的日期。
我想要创建的表格中的列是:访问后的天数(0-14)以及特定日期报告的平均访问次数
对于第二栏,我想知道: 如果我在visit_date后0天限制创建日期,那么在访问日期会发生多少次访问(使用非null的chief_complaint)?
如果我将创建的日期限制在visit_date后的0或1天,那么访问日期会发生多少次访问(使用非null的chief_complaint)?
如果我将date_created限制为visit_date后的0,1或2天,那么在该访问日期发生了多少次访问(使用非null的chief_complaint)?
等等,直到你访问_date后的1-14天。
有什么想法吗?我从这开始,我知道这是错的,但不知道如何解决它......
答案 0 :(得分:1)
据我所知,你真的想要制作两张表:
所有访问的列表,包含提交/创建之前的天数 每个
所有日期的列表,包含每个日期的访问次数,包括在
如果这就是你的意思,这个宏应该可以解决问题。 dsn_in
是原始数据集的名称。 dsn_out_days
是保存第一个项目符号点结果的数据集的名称。 dsn_out_summary
是保存第二个项目符号点结果的数据集的名称。
%MACRO do_analysis (dsn_in = , dsn_out_days = , dsn_visits_by_date = );
%LOCAL i ;
DATA &dsn_out_days;
SET &dsn_in;
days_after_visit = INTCK ('DAYS', Visit_Date, Date_Created);
%DO i = 0 %TO 14;
submitted_up_to_&i._days_after = (days_after_visit <= &i);
LABEL submitted_up_to_&i._days_after = "Submitted Up To &i Days After" ;
%END;
RUN;
PROC SUMMARY NWAY DATA = &dsn_out_days (
WHERE = ( NOT MISSING (Chief_Complaint) )
);
CLASS Visit_Date;
OUTPUT
OUT = &dsn_visits_by_date (
DROP = _TYPE_
RENAME = (_FREQ_ = total_visits)
)
SUM (
%DO i = 0 %TO 14;
submitted_up_to_&i._days_after
%END;
) =
;
RUN;
/* Comment out this data step to see how everything works under the hood */
DATA &dsn_out_days;
SET &dsn_out_days (
DROP =
%DO i = 0 %TO 14;
submitted_up_to_&i._days_after
%END;
);
RUN;
DATA &dsn_visits_by_date;
SET &dsn_visits_by_date ;
LABEL total_visits = "Total Visits";
RUN;
PROC SORT DATA = &dsn_visits_by_date ;
BY Visit_Date ;
RUN;
%MEND;
请注意,%DO
宏用法可以减少打字的苦差事:
submitted_up_to_1_days_after = (days_after_visit <= 1);
submitted_up_to_2_days_after = (days_after_visit <= 2);
submitted_up_to_3_days_after = (days_after_visit <= 3);
. . . .
但如果您更喜欢无宏解决方案,我可以编辑。请告诉我。