You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SAS中用三次样条插值生成指定时间点的体重数据?

在SAS中用三次样条插值处理生长数据

问题背景

现有参与者的体重生长数据,需按个体插值得到0、12、24、36个月时的精确体重,原始数据为同一id的多时间点重复测量,此前尝试PROC EXPAND但不确定分组处理的操作方式。

原始数据代码:

DATA Have;
INPUT id age weight;
DATALINES;
1 0 4
1 2.2 6
1 5 8
1 10 20
1 11.3 28
1 28 40
1 40 53
2 0 3
2 1.5 8
2 4.9 15
2 6.4 20
2 14.9 40
2 31 50
2 41 66
3 0 6
3 2.8 11
3 6.1 23
3 9.4 36
3 19.1 40
3 37 51
;
RUN;

解决方案:PROC EXPAND分组三次样条插值

PROC EXPAND完全支持按个体分组处理重复测量数据,核心是通过BY语句指定分组变量,结合三次样条方法实现插值。

1. 创建目标时间点数据集

先生成包含所有需要插值的时间点(0、12、24、36)的数据集,每个id对应这些时间点:

DATA Target_Ages;
DO id = 1 TO 3;  /* 可根据实际id范围调整 */
    DO age = 0, 12, 24, 36;
        OUTPUT;
    END;
END;
RUN;

2. 执行三次样条插值

通过PROC EXPAND将原始数据与目标时间点关联,按id分组完成插值:

PROC EXPAND DATA=Have OUT=Want FROM=AGE TO=AGE METHOD=SPLINE;
    BY id;  /* 按id分组,确保每个参与者的插值独立进行 */
    ID age;  /* 指定时间轴变量 */
    CONVERT weight=interp_weight / OUT=Target_Ages;  /* 将原始体重插值到目标时间点,生成新变量interp_weight */
RUN;

代码关键说明

  • BY id;:必须添加,避免不同参与者的数据交叉干扰,保证插值基于个体自身的生长曲线。
  • METHOD=SPLINE:指定三次样条插值,该方法适合生长数据,能生成平滑且连续可导的曲线。
  • CONVERT语句:定义原始变量和插值后变量名,同时指定输出到目标时间点数据集,确保只保留需要的插值结果。

3. 查看插值结果

可通过打印过滤后的数据验证结果:

PROC PRINT DATA=Want;
    WHERE age IN (0,12,24,36);
    BY id;
RUN;

内容的提问来源于stack exchange,提问作者user21583043

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 05:43:16