SAS 分配编号和按帐户分区
SAS assigning numbers and partitioning by account
我使用 SAS EG 并且有一个数据集如下所示:
CLIENT_ID Segment Yearmonth
XXXX A 201305
XXXX A 201306
XXXX A 201307
YYYY A 201305
YYYY A 201306
YYYY B 201307
我想要一个输出,其中有一个分配给新列的数字,当有新帐户时该数字会重置:
CLIENT_ID Segment Yearmonth New_Variable
XXXX A 201305 1
XXXX A 201306 2
XXXX A 201307 3
YYYY A 201305 1
YYYY A 201306 2
YYYY B 201307 3
这是第一个问题,我用这段代码解决了这个问题:
PROC SORT DATA= GENERAL.HISTORICAL_SEGMENTS;
by Client_ID;
RUN;
data HISTORICAL_SEGMENTS2;
SET GENERAL.HISTORICAL_SEGMENTS;
count + 1;
by Client_ID;
if first.Client_ID then count = 1;
run;
我想创建第二个数据集,我想看看是否有一种方法可以仅在段发生变化时获取段:例如上面的
CLIENT_ID Segment Yearmonth New_Variable
YYYY A 201305 1
YYYY B 201306 2
如有任何帮助,我们将不胜感激。谢谢。
很高兴回答您的第一个问题。我认为如果您重新排列一下,该步骤会更清楚,例如:
data HISTORICAL_SEGMENTS2 ;
set GENERAL.HISTORICAL_SEGMENTS ;
by Client_ID ;
if first.Client_ID then count = 0 ;
count + 1 ;
run;
为了清楚起见,我认为通常将 BY 语句放在它适用的 SET 语句之后。 Client_ID 更改时将计数器重置为 0。
您似乎想要第二个数据集,将其命名为 FIRSTS,其中包含每个组的第一条记录。为此,请注意,一个数据步骤可以写入多个输出数据集。这可以通过使用显式 OUTPUT 语句写入每个数据集来完成,例如:
data HISTORICAL_SEGMENTS2 FIRSTS ;
set GENERAL.HISTORICAL_SEGMENTS ;
by Client_ID ;
if first.Client_ID then count = 0 ;
count + 1 ;
output HISTORICAL_SEGMENTS2 ; *output every record;
if first.Client_ID then output FIRSTS ; *output first of each group;
run;
我使用 SAS EG 并且有一个数据集如下所示:
CLIENT_ID Segment Yearmonth
XXXX A 201305
XXXX A 201306
XXXX A 201307
YYYY A 201305
YYYY A 201306
YYYY B 201307
我想要一个输出,其中有一个分配给新列的数字,当有新帐户时该数字会重置:
CLIENT_ID Segment Yearmonth New_Variable
XXXX A 201305 1
XXXX A 201306 2
XXXX A 201307 3
YYYY A 201305 1
YYYY A 201306 2
YYYY B 201307 3
这是第一个问题,我用这段代码解决了这个问题:
PROC SORT DATA= GENERAL.HISTORICAL_SEGMENTS;
by Client_ID;
RUN;
data HISTORICAL_SEGMENTS2;
SET GENERAL.HISTORICAL_SEGMENTS;
count + 1;
by Client_ID;
if first.Client_ID then count = 1;
run;
我想创建第二个数据集,我想看看是否有一种方法可以仅在段发生变化时获取段:例如上面的
CLIENT_ID Segment Yearmonth New_Variable
YYYY A 201305 1
YYYY B 201306 2
如有任何帮助,我们将不胜感激。谢谢。
很高兴回答您的第一个问题。我认为如果您重新排列一下,该步骤会更清楚,例如:
data HISTORICAL_SEGMENTS2 ;
set GENERAL.HISTORICAL_SEGMENTS ;
by Client_ID ;
if first.Client_ID then count = 0 ;
count + 1 ;
run;
为了清楚起见,我认为通常将 BY 语句放在它适用的 SET 语句之后。 Client_ID 更改时将计数器重置为 0。
您似乎想要第二个数据集,将其命名为 FIRSTS,其中包含每个组的第一条记录。为此,请注意,一个数据步骤可以写入多个输出数据集。这可以通过使用显式 OUTPUT 语句写入每个数据集来完成,例如:
data HISTORICAL_SEGMENTS2 FIRSTS ;
set GENERAL.HISTORICAL_SEGMENTS ;
by Client_ID ;
if first.Client_ID then count = 0 ;
count + 1 ;
output HISTORICAL_SEGMENTS2 ; *output every record;
if first.Client_ID then output FIRSTS ; *output first of each group;
run;