【问题标题】:Proc transpose having multiple ID values.具有多个 ID 值的 Proc 转置。
【发布时间】:2014-07-04 14:28:52
【问题描述】:

您好,我有如下数据,当我编写代码时,它给出的错误如下。, 我尝试了不同的方法,但不确定我是否做得对。,

regid   Analysis    value
1378979 Samsjuklighet_L 0
1378979 andrainsatser_2_L   0
1378979 behandling_1_L  5
1378979 behandling_4_L  1
1378979 behandlingsinsatser_2a_L    6
1378979 behandlingsmål_1_L  1
1378979 behandlingsmål_1_L  2
1378979 behandlingsmål_1_L  3
1378979 behandlingsmål_1_L  4
1378979 behandlingsmål_1_L  5
1378979 behandlingsmål_1_L  6
1378979 boende_1_L  1
1378979 boende_2_L  1
1378979 droger_2xc_L    2

我写了如下代码

proc transpose data=X
out=Y;
var value;
by regid;
id Analysis;
run;

但它给出了错误

ERROR: The ID value "behandlingsm_l_1_L" occurs twice in the same BY group.
ERROR: The ID value "behandlingsm_l_1_L" occurs twice in the same BY group.
ERROR: The ID value "behandlingsm_l_1_L" occurs twice in the same BY group.
ERROR: The ID value "behandlingsm_l_1_L" occurs twice in the same BY group.
ERROR: The ID value "behandlingsm_l_1_L" occurs twice in the same BY group.

我也采取了新的方式,

data X; 
set X  ;by  regid analysis value; 
if first.analysis then n = 0; 
n+1; 
run;

proc sort data = X; 
by  regid analysis value n; 
run;

proc transpose data=X out=temp1 (drop=n) let  ;
by regid;
var value;
id analysis;
run;

这会像上面的错误一样发出警告,但会删除所有重复项。但我想拥有变量的所有多个值。

我该怎么做?

【问题讨论】:

  • 请您发布您希望输出数据集对于您提供的输入数据集的样子吗?

标签: sas transpose proc


【解决方案1】:

正如 sas 日志所说,您需要每个组内的 id 变量的唯一值。这不是真的,因为 regid 总是具有相同的值。要拥有所有重复项,您可以创建一个 by 变量,以便 analysis 的值是唯一的。

data input;
infile datalines dlm=" ";
informat Analysis $25.;
input regid   Analysis  $  value;
datalines;
1378979 Samsjuklighet_L 0
1378979 andrainsatser_2_L   0
1378979 behandling_1_L  5
1378979 behandling_4_L  1
1378979 behandlingsinsatser_2a_L    6
1378979 behandlingsmål_1_L  1
1378979 behandlingsmål_1_L  2
1378979 behandlingsmål_1_L  3
1378979 behandlingsmål_1_L  4
1378979 behandlingsmål_1_L  5
1378979 behandlingsmål_1_L  6
1378979 boende_1_L  1
1378979 boende_2_L  1
1378979 droger_2xc_L    2
;
run;
proc sort data=input;
    by regid Analysis;
run;
data input;
    set input;
    retain conta;
    by regid Analysis;
    if first.Analysis then conta=0;
    conta+1;
run;
proc sort data=input;
    by regid conta;
run;
proc transpose data=input out=output(drop=_NAME_ conta);
    var value;
    by regid conta;
    id Analysis;
run;

要小心,因为如果analysis 在任何情况下都超过 32 个字符,它会给你一个错误

【讨论】:

    猜你喜欢
    • 2011-10-25
    • 2018-01-03
    • 1970-01-01
    • 2015-04-24
    • 2012-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-09
    相关资源
    最近更新 更多