arrays - SAS 宏打印出基线分数的变化
问题描述
我正在寻找一种使用 SAS 宏打印出每个科目的测试分数变化的方法。以下是数据示例:
Subject Visit Date Test Score
001 Baseline 01/01/99 Jump 5
001 Baseline 01/01/99 Reach 3
001 Week 6 02/12/99 Jump 7
001 Week 6 02/12/99 Reach 6
002 Baseline 03/01/99 Jump 2
002 Baseline 03/01/99 Reach 4
002 Week 6 04/12/99 Jump 5
002 Week 6 04/12/99 Reach 9
我想创建一个宏,为每个主题生成以下内容:
Subject Visit Date (Days from Baseline) Test Score Change from Baseline Score
001 Baseline 01/01/99 Jump 5
01/01/99 Reach 3
001 Week 6 02/12/99 (42) Jump 7 +2
02/12/99 (42) Reach 6 +3
002 Baseline 03/01/99 Jump 2
03/01/99 Reach 4
002 Week 6 04/12/99 (42) Jump 5 +3
04/12/99 (42) Reach 9 +5
我相信我可以只使用基线天数的 INTCK 函数,但我不确定如何在不保留每行中的“主题”和“访问”值的情况下打印每个测试。任何帮助将非常感激。
解决方案
您可以使用保留日期和分数来计算增量,按测试和流程进行排序。可以使用 打印输出Proc REPORT
,适当地格式化增量值。
例子:
data have; input
Subject Visit& $8. Date& mmddyy8. Test $ Score; format date mmddyy8.; datalines;
001 Baseline 01/01/99 Jump 5
001 Baseline 01/01/99 Reach 3
001 Week 6 02/12/99 Jump 7
001 Week 6 02/12/99 Reach 6
002 Baseline 03/01/99 Jump 2
002 Baseline 03/01/99 Reach 4
002 Week 6 04/12/99 Jump 5
002 Week 6 04/12/99 Reach 9
run;
proc sort data=have;
by subject test date;
run;
data for_report;
set have;
by subject test;
retain base_date base_score;
if first.subject then do;
base_date = .;
base_score = .;
end;
if first.test and visit='Baseline' then do;
base_date = date;
base_score = score;
end;
if not first.test then do;
delta_days = intck('days', date, base_date);
delta_score = score - base_score;
end;
run;
proc format;
picture plus low-0 = [best12.] other = '000000009' (prefix='+');
options missing=' ';
proc report data=for_report;
columns subject visit date delta_days test score delta_score;
define subject / order;
define visit / order order=data;
format delta_days negparen.;
format delta_score plus.;
run;
options missing='.';
备用报告可以更加以主题为中心:
proc report data=for_report
style(lines) = [just=left fontweight=bold]
;
columns subject visit date delta_days test score delta_score;
define subject / order noprint;
define visit / order order=data;
format delta_days negparen.;
format delta_score plus.;
compute before subject;
subj = catx(' ', "Subject:", subject);
line subj $200.;
endcomp;
run;
推荐阅读
- css - 将鼠标悬停在包含图标的 div 上时更改图标的颜色
- powershell - 在 PowerShell 中生成 samaccountname 的函数
- python - 使用列表切片数组
- snowflake-cloud-data-platform - 雪花流不清除
- swift - 动态创建枚举案例
- python - 获取 429:在速率限制指南内使用 Sheets API 的请求过多
- javascript - 根据字符串的特定排列对字符串数组进行排序
- reactjs - Material UI 自动完成中无选项的操作按钮
- javascript - 如何创建 JavaScript 选项卡以迭代 JavaScript 对象?
- c++ - 类特化,没有用作特化模板参数的类的模板参数