2017-10-17 77 views
1

这可能很简单。SAS:通过枚举创建类

我需要创建一个类似于一个顺序的变量,但顺序只会在每次第二次观察之后才会增加。

在此先感谢!

date order 
1-1-10 1 
2-1-10 1 
3-1-10 2 
4-1-10 2 
5-1-10 3 
6-1-10 3 
7-1-10 4 
7-1-10 4 

etc 

回答

2

您将使用两个主要工具:mod函数和sum语句。 sum语句看起来像不正确的语法,但它是retain的特殊情况。

_N_是一个特殊的变量,充当您的观察计数器。每当您的data步骤从顶部到底部循环(即从datarun),_N_递增1。

通过在_N_上使用mod,我们可以对结果为1的每两个观察值增加一个计数器。换句话说,如果您将观测计数除以2并得到余数1,则将1加1 order

例如:

_N_ _N_/2 Remainder Operation Value 
1 1/2  1   0+1   1 
2 2/2  0   N/A   1 
3 3/2  1   1+1   2 
4 4/2  0   N/A   2 
5 5/2  1   2+1   3 
6 6/2  0   N/A   3 

最终,我们正在做的,我们在特定的条件下增加一些值的操作,随身携带着,并重复。

这怎么代码如下:

data want; 
    set have; 

    if(mod(_N_, 2) = 1) then order+1; 
run; 
+2

或者因为MOD(INT; 2)返回0或1,你可以简单地使用'为了+ MOD(_N_,2);' – Tom

0

在数据步骤中,您可以使用自动变量_n_(例如, ceil(_n_/2)

在SQL中,monotonic()函数可以做同样的工作。