SAS如果第一个变量,则分配值

SAS如果第一个变量,则分配值,sas,Sas,我有一个按6个变量排序的数据集 我想使用first.variable(在我的例子中是第六个变量)为数据集的新变量(第七、第八个变量)设置初始值 例如: if first.variable_name then do; ratevalue = 999; factor = 100.00; end; 第一个.variable是groupby中的第六个变量 集团中的第一列硬编码日期值为“2017年3月20日”。因此,只有1个组的第一列包含所有200K观测值 问题是,当我执行上述代码时,我期望分配给观测值

我有一个按6个变量排序的数据集

我想使用first.variable(在我的例子中是第六个变量)为数据集的新变量(第七、第八个变量)设置初始值

例如:

if first.variable_name then do;
ratevalue = 999;
factor = 100.00;
end;
第一个.variable是groupby中的第六个变量

集团中的第一列硬编码日期值为“2017年3月20日”。因此,只有1个组的第一列包含所有200K观测值

问题是,当我执行上述代码时,我期望分配给观测值的ratevalue和factor,其中first.variable_name='1'

但是,这些值从第一个变量开始分配给所有200k观测值

如果我使用

if last.variable_name then do;

'ratevalue = 999;'
factor = 100.00;
end;
然后,它将上述值分配给从组中第6个变量对组进行的最后一次观察开始的所有观察值

这就是它的工作原理


谢谢

您应该能够无问题地获得所需的输出。分组前确保数据已排序:您可以在
BY
语句中使用
proc sort
notsorted

请参见我下面的7列示例,我按前6列进行分组:

data have;
input
  Period    Region $  city $ Sales1    Sales2    Sales3     Sales4     Sales5  total ;
  datalines;
   1         North     XY  1 2 2  2 2 30
   1         North     XY  1 2 2 2 2 40
   1         South     ZZ  1 1 1  2 2 100
   1         South     ZY  1 1 0 1 1 40
   ;
run;

data want;
set have;
by Period    Region   city  Sales1    Sales2    Sales3     Sales4     Sales5 notsorted;
if first.Sales5 = 1 then do; ratevalue=999; factor=100.00; end;
run;
输出:

 Period=1 Region=North city=XY Sales1=1 Sales2=2 Sales3=2 Sales4=2 Sales5=2 total=30 f_s5=1 l_s5=0 ratevalue=999 factor=100
 Period=1 Region=North city=XY Sales1=1 Sales2=2 Sales3=2 Sales4=2 Sales5=2 total=40 f_s5=0 l_s5=1 ratevalue=. factor=.
 Period=1 Region=South city=ZZ Sales1=1 Sales2=1 Sales3=1 Sales4=2 Sales5=2 total=100 f_s5=1 l_s5=1 ratevalue=999 factor=100
 Period=1 Region=South city=ZY Sales1=1 Sales2=1 Sales3=0 Sales4=1 Sales5=1 total=40 f_s5=1 l_s5=1 ratevalue=999

您应该能够在没有问题的情况下获得所需的输出。分组前确保数据已排序:您可以在
BY
语句中使用
proc sort
notsorted

请参见我下面的7列示例,我按前6列进行分组:

data have;
input
  Period    Region $  city $ Sales1    Sales2    Sales3     Sales4     Sales5  total ;
  datalines;
   1         North     XY  1 2 2  2 2 30
   1         North     XY  1 2 2 2 2 40
   1         South     ZZ  1 1 1  2 2 100
   1         South     ZY  1 1 0 1 1 40
   ;
run;

data want;
set have;
by Period    Region   city  Sales1    Sales2    Sales3     Sales4     Sales5 notsorted;
if first.Sales5 = 1 then do; ratevalue=999; factor=100.00; end;
run;
输出:

 Period=1 Region=North city=XY Sales1=1 Sales2=2 Sales3=2 Sales4=2 Sales5=2 total=30 f_s5=1 l_s5=0 ratevalue=999 factor=100
 Period=1 Region=North city=XY Sales1=1 Sales2=2 Sales3=2 Sales4=2 Sales5=2 total=40 f_s5=0 l_s5=1 ratevalue=. factor=.
 Period=1 Region=South city=ZZ Sales1=1 Sales2=1 Sales3=1 Sales4=2 Sales5=2 total=100 f_s5=1 l_s5=1 ratevalue=999 factor=100
 Period=1 Region=South city=ZY Sales1=1 Sales2=1 Sales3=0 Sales4=1 Sales5=1 total=40 f_s5=1 l_s5=1 ratevalue=999

如果您的6个BY变量唯一地标识每一行,那么列表中的最后一个变量将构成一个观察组,该观察组始终是第一个和最后一个。这是怎么回事?如果没有,那就发一个简单的例子,上面只有一些观察结果和几个副变量来证明你的问题;需要数据;按日期_var;设置smt;如果是第一个,那么。。。如果您的6个BY变量唯一地标识了每一行,那么列表中的最后一个变量将构成一个观察组,该观察组始终是第一个和最后一个。这是怎么回事?如果没有,那就发一个简单的例子,上面只有一些观察结果和几个副变量来证明你的问题;需要数据;按日期_var;设置smt;如果是第一个,那么。。。你应该放弃你想要的。