【问题标题】:SAS proc transpose duplicate values issueSAS proc转置重复值问题
【发布时间】:2022-07-12 20:20:59
【问题描述】:

我需要你的帮助,拜托!

我在 SAS 上做一个 proc 转置,来自一个只有唯一行的表。但是它返回以下错误

错误:ID 值 \"\'OUTROS_CANAIS_Fatura Eletrónica\'n\" 在同一个 BY 组中出现两次。 注意:以上消息适用于以下 BY 组: ID_CLIENTE=xxxxxxxxxx

当我检查原始表时,ID_CLIENTE xxxxxxxxxxx 有两行:

ID_CLIENTE MOTIVO Nr_Solicitacoes

xxxxxxxxxx OUTROS_CANAIS_Fatura Eletrónica - adesão 1

xxxxxxxxxx OUTROS_CANAIS_Fatura Eletrónica - cancelamento 1

我相信是 \'-\' 导致了问题(原始数据附带),因为它们显然是两个不同的值。

任何想法如何解决这个问题?

编辑:我已经设法替换了 \'-\' 值,但是它仍然返回相同的错误......

谢谢!!

  • 显示您的 Proc TRANSPOSE 声明
  • 你好@Richard 我已经想通了。它在我的回答中。但是感谢您的关注!

标签: sas proc-sql


【解决方案1】:

Proc TRANSPOSEID 语句在透视数据时将数据值转换为列名。列名限制为 32 个字符(列标签限制为 200 个字符)。截断为 32 个字符时,您的 ID 值是相同的值,并且您会收到“出现两次”的 LOG 消息。

您可以添加一个新变量来区分 id 值,并使用IDLABEL 语句将原始 id 值存储在变量标签中。

例子:

idnum被添加到数据中,用于区分id值。如果您有许多 id 值,则可以使用哈希为每个 id 值动态分配唯一的 idnum

options validvarname = v7;

data have;
  id = 'xxxxxxxxxx OUTROS_CANAIS_Fatura Eletrónica - adesão';
  idnum = 1;
  count = 1;
  output;

  id = 'xxxxxxxxxx OUTROS_CANAIS_Fatura Eletrónica - cancelamento 1';
  idnum = 2;
  output;
run;

proc transpose data=have out=want;
  id idnum;
  idlabel id;
  var count;
run;

proc contents data=work.want;
run;

【讨论】:

    【解决方案2】:

    弄清楚了!

    SAS 只允许 32 位列……这是一个以“-”结尾的巧合。

    【讨论】:

      猜你喜欢
      • 2013-12-03
      • 2022-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-25
      相关资源
      最近更新 更多