SAS如果第一个变量,则分配值
我有一个按6个变量排序的数据集 我想使用first.variable(在我的例子中是第六个变量)为数据集的新变量(第七、第八个变量)设置初始值 例如: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观测值 问题是,当我执行上述代码时,我期望分配给观测值
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;如果是第一个,那么。。。你应该放弃你想要的。