SAS循环变量

SAS循环变量,sas,Sas,试着用谷歌搜索,却找不到(也许是我完全没有发现) 我想在我的数据集中创建一个名为step的新变量,它从1开始计数,直到customerid发生变化 例如: 这是我拿到的桌子: Customerid Page step 1 Frontpage 1 Middlepage 2 Frontpage 2 Middlepage 2 Lastpage 3

试着用谷歌搜索,却找不到(也许是我完全没有发现)

我想在我的数据集中创建一个名为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;

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

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

data nordea_dk1;
    set nordea_dk;
    by customerid;

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

run; 

检查您的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中出现新的唯一id时,我希望它重置为1。也许我应该提到customerid是一个文本变量,不知道这是否有任何影响?如果它是一个文本变量,这应该无关紧要,数据集是否已排序?确保输入数据集中不存在新变量
STEP
。这将阻止保留值。它不会,只是为了示例,但仍然不会发布显示问题的示例数据。发布在“我得到了什么”下,您的程序将生成此错误消息<代码>错误117-185:有1个未关闭的DO块。如果我修复了该错误,则会生成此错误<代码>错误:BY variable custerimd不在输入数据集上…也许您一直在查看SAS实际可以运行的代码版本中的输出数据的旧版本?我在使用您的代码时也会看到。是因为在真实的数据集中customerid是一个文本字符串吗?不是。首先。标志不关心变量是数字还是字符。在您的帮助下,我找到了问题!我将customerid变量设置为name:'Visitor ID'n然后我将它改为ID,它就像一个符咒,因为某些原因:S。这是有道理的。您的结果与BY变量为常量的结果一致。