【问题标题】:SAS loop by variableSAS循环变量
【发布时间】:2020-01-14 11:43:58
【问题描述】:

试图用谷歌搜索它并找不到任何东西(也许是我完全是菜鸟)。

我想在我的数据集中创建一个名为 step 的新变量,它从 1 开始计数,直到 customerid 发生变化。

示例: 这是我得到的表:

Customerid  Page        step
1           Frontpage   
1           Middlepage  
2           Frontpage   
2           Middlepage  
2           Lastpage    
3           Frontpage   
3           Middlepage  

我想要什么:

Customerid  Page       step
1           Frontpage   1
1           Middlepage  2
2           Frontpage   1
2           Middlepage  2
2           Lastpage    3
3           Frontpage   1
3           Middlepage  2

我现在得到的:

Customerid  Page    step
1   Frontpage   1
1   Middlepage  2
2   Frontpage   3
2   Middlepage  4
2   Lastpage    5
3   Frontpage   6
3   Middlepage  7

我尝试在 sas 中执行此操作,但没有成功:

data nordea_dk1;
set nordea_dk;
by custerimd;
if first.customerid then do; 
step=1;
step + 1;
output;
run;

【问题讨论】:

  • 确保新变量STEP 不存在于您的输入数据集中。这将阻止这些值被保留。
  • 它没有,只是为了示例,但仍然不起作用
  • 发布显示问题的示例数据。
  • 发表于:“我得到了什么”
  • 您的程序会生成此错误消息。 ERROR 117-185: There was 1 unclosed DO block. 如果我修复它,那么它会生成此错误。 ERROR: BY variable custerimd is not on input data set... 也许您一直在查看 SAS 实际可以运行的代码版本的输出数据的旧版本?

标签: sas


【解决方案1】:

检查您的 SAS 日志中的注释或错误。基本逻辑适用于您的测试数据。

data have ;
 input Customerid Page $20. ;
cards;
1 Frontpage
1 Middlepage
2 Frontpage
2 Middlepage
2 Lastpage
3 Frontpage
3 Middlepage
;

data want ;
  set have ;
  by customerid ;
  if first.customerid then step=0;
  step+1;
run;

【讨论】:

  • 当我使用你的代码时我也明白了。是不是因为在真实数据集中customerid是一个文本字符串?
  • 没有。第一的。标志不关心变量是数字还是字符。
  • 在您的帮助下,我找到了问题!我将 customerid 变量设置为名称:'Visitor ID 'n 然后我将其更改为 ID,出于某种原因它就像一个魅力:S.
  • 这有点道理。您的结果与作为常量的 BY 变量一致。
【解决方案2】:

一些语法项目,custerimd 有拼写错误,do 是不必要的。此外,在这种情况下不需要output,因为它也会在数据步骤结束时输出。

在程序逻辑方面,您需要重置 first.customerid 上的步骤,并在附加值上增加它,因此需要 else 情况。这应该是您正在寻找的:

data nordea_dk1;
    set nordea_dk;
    by customerid;

    if first.customerid then
        step=1;
    else
        step+1;

run; 

【讨论】:

  • 然后我这样做,它只计算每个观察值。它不按 customerid 变量对计数进行分组吗?当涉及到变量 customerid 中的新唯一 ID 时,我希望它重置为 1。
  • 也许我应该提一下customerid是一个文本变量,不知道有没有影响?
  • 如果是文本变量应该没关系,数据集排序了吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-11
  • 2017-11-01
  • 1970-01-01
相关资源
最近更新 更多