通过SAS

时间:2018-04-04 21:08:45

标签: merge sas

我正在使用SAS,我需要找到观察到的和模型数据参数估计值之间的差异。我的问题是两个数据集不能一对一匹配。这是我正在使用的缩短示例:

data models; input subject $ model $ _RMSE_ intercept X1 X2 _RSQ_;
datalines;
A   X   0.065140589 -0.047688351    0.000607126 -7.07E-07   0.205605571
A   Y   0.124751538 -0.054223164    0.001032068 -4.20E-07   0.372413362
A   Z   0.085574381 -0.044588016    0.000816996 -9.10E-07   0.178236114
B   X   0.263592542 -0.172935382    0.003415054 -4.69E-06   0.204917524
B   Y   0.412902318 -0.060747534    0.002600555 -1.06E-06   0.255847395
B   Z   0.413126643 -0.200871559    0.003991876 -3.93E-06   0.216041967
;
run;

data obs; input subject $ set $ _RMSE_ intercept X1 X2 _RSQ_;
datalines;
A   1   0.119549577 0.033531462 0.000274086 1.60E-07    0.218312257
A   2   0.115862664 0.032904509 0.00024085  2.19E-07    0.235676326
A   3   0.104894694 0.027893524 0.000203312 3.04E-07    0.293416317
A   4   0.097880177 0.002515158 0.000250778 3.03E-07    0.373180007
A   5   0.077454025 -0.002850176    0.000230676 4.11E-07    0.477068396
B   1   0.130485919 0.089148147 0.00048157  -3.01E-07   0.131315385
B   2   0.124873502 0.07543287  0.000413505 -1.31E-07   0.170287809
B   3   0.107846946 0.040220511 0.000470348 -1.17E-07   0.282334021
B   4   0.113946123 0.074896237 0.000182358 2.69E-07    0.21846564
B   5   0.109164001 0.046820011 0.000441038 -4.49E-08   0.240814334
;
run;

我需要找到每个主题模型参数估计值与该主题的所有观察参数估计值之间的差异。因此,输出的前几行看起来像这样:

SUBJECT MODEL   SET _RMSE_  Intercept   X1  X2  _RSQ_
A   X   1   -0.054408988    -0.081219813    0.00033304  -8.67E-07   -0.012706686
A   X   2   -0.050722075    -0.08059286 0.000366276 -9.26E-07   -0.030070755
A   X   3   -0.039754105    -0.075581875    0.000403814 -1.01E-06   -0.087810746
A   X   4   -0.032739587    -0.050203509    0.000356348 -1.01E-06   -0.167574436
A   X   5   -0.012313436    -0.044838175    0.00037645  -1.12E-06   -0.271462824
A   Y   1   0.00520196  -0.087754626    0.000757982 -5.80E-07   0.154101105
A   Y   2   0.008888873 -0.087127673    0.000791218 -6.39E-07   0.136737036
A   Y   3   0.019856844 -0.082116688    0.000828755 -7.24E-07   0.078997045
A   Y   4   0.026871361 -0.056738322    0.000781289 -7.24E-07   -0.000766645
A   Y   5   0.047297512 -0.051372988    0.000801391 -8.31E-07   -0.104655034

如果集合是偶数,我会合并它们并找出变量之间的差异。但是对于不均匀的集合,我真的不确定如何继续这个。

1 个答案:

答案 0 :(得分:1)

您似乎需要多对多合并:models数据集中模型A的每一行应与obs数据集中模型A的每一行匹配。在SAS中执行此操作的最简单方法是PROC SQL:

PROC SQL noprint;
CREATE TABLE merged as
SELECT models._RMSE_ as RMSE1, obs._RMSE_ as RMSE2,
       models.Intercept as Intercept1, obs.Intercept as Intercept2
FROM models JOIN obs
ON models.Model = obs.Model;

然后,您可以计算数据步骤中的差异(当然,您需要重命名所有变量,而不仅仅是_RMSE_Intercept)。如果你研究SQL,有一种方法可以动态创建计算变量,但第一次这可能更容易理解。