Sas 复杂的任务、延迟和保留功能可能不够好
可能是我遇到的最复杂的任务。 我真的需要你的帮助 假设我有一个类似的数据集:Sas 复杂的任务、延迟和保留功能可能不够好,sas,Sas,可能是我遇到的最复杂的任务。 我真的需要你的帮助 假设我有一个类似的数据集: data have; rk = 1; version = 0; treatment_ind = 1; start_date_1 = "01jan2013"d; end_date_1 = "01feb2013"d; start_date_2 = "21jan2013"d; end_date_2 = "18feb2013"d; money_field = 32; OUTPUT; rk = 1; version = 1;
data have;
rk = 1;
version = 0;
treatment_ind = 1;
start_date_1 = "01jan2013"d;
end_date_1 = "01feb2013"d;
start_date_2 = "21jan2013"d;
end_date_2 = "18feb2013"d;
money_field = 32;
OUTPUT;
rk = 1;
version = 1;
treatment_ind = 1;
start_date_1 = "01feb2013"d;
end_date_1 = "01apr2013"d;
start_date_2 = "3jan2013"d;
end_date_2 = "9feb2013"d;
money_field = 1;
OUTPUT;
rk = 1;
version = 2;
treatment_ind = 2;
start_date_1 = "01jan2013"d;
end_date_1 = "01feb2013"d;
start_date_2 = "21jan2013"d;
end_date_2 = "18feb2013"d;
money_field = 65;
OUTPUT;
rk = 1;
version = 3;
treatment_ind = 3;
start_date_1 = "01jan2013"d;
end_date_1 = "01jun2013"d;
start_date_2 = "21jul2013"d;
end_date_2 = "18aug2013"d;
money_field = 6;
OUTPUT;
rk = 1;
version = 0;
treatment_ind = 7;
start_date_1 = "11mar2013"d;
end_date_1 = "22may2013"d;
start_date_2 = "21feb2013"d;
end_date_2 = "24feb2013"d;
money_field = 34;
OUTPUT;
FORMAT start_date_1 end_date_1 start_date_2 end_date_2 DATE9.;
run;
如果治疗=1-这是一个简单的方法。通常情况下,所有的计算对我来说都很好
更棘手的问题如下:
如果治疗指数=2,
我需要做几件事:
首先,更简单的任务是:更新现有行中的几个字段,其中treatment_ind=2
每个rk在某个地方拥有一个治疗_ind=2,应该以某种方式行动
如果治疗指数=3
首先,更简单的任务是:更新现有行中的几个字段,其中treatment_ind=3
每个rk都有一个治疗ind=3,应该以某种方式进行。不同的方式
等等。。。。
我有8个不同的指标,它们以不同的方式发挥作用,不仅仅是针对当前行,
但是每一行,按RK,都在某处拥有指示器
其中一些指标实际上取消了其他指标的行为。
例如
如果某个RK某处有一个指示器_ind=7,
不应计算治疗指数=3
当所有这些都完成后,
我应该使用Retain来将数字从一行累加到另一行
主要问题是,,
我无法上传与我一起工作的表格来更好地解释我所面临的情况,
我上传的数据集非常简单,并不代表任务的复杂性
比如说,,
指标_ind=1,则日期之间的差异应根据第一组日期确定。
在其他指标中,应根据第二组进行计算
很多其他的计算也是如此
我知道很难回答这个问题
但是,首先,我想知道一个方向。。。
由于仅保留/延迟对我没有帮助,我担心…这可能会帮助您解决问题,但由于我无法查看您的数据集,因此很难预测。您可以使用RETURN和SELECT语句。RETURN跳过当前的数据步骤迭代并继续下一个迭代。SELECT与其他编程语言中的switch语句类似。一旦满足条件,它将只执行该条件的后续语句
data work.test;
set work.sample;
if indicator_ind=7 and treatment_ind=3 then return;
select;
when(treatment_ind = 1 and version = 0) do;
rk = 1;
start_date_1 = "01jan2013"d;
end_date_1 = "01feb2013"d;
start_date_2 = "21jan2013"d;
end_date_2 = "18feb2013"d;
money_field = 32;
OUTPUT;
end;
when(treatment_ind = 1 and version = 1) do;
rk = 1;
start_date_1 = "01feb2013"d;
end_date_1 = "01apr2013"d;
start_date_2 = "3jan2013"d;
end_date_2 = "9feb2013"d;
money_field = 1;
OUTPUT;
end;
when(treatment_ind = 2 and version = 2) do;
rk = 1;
start_date_1 = "01jan2013"d;
end_date_1 = "01feb2013"d;
start_date_2 = "21jan2013"d;
end_date_2 = "18feb2013"d;
money_field = 65;
OUTPUT;
end;
when(treatment_ind = 3 and version = 3) do;
rk = 1;
start_date_1 = "01jan2013"d;
end_date_1 = "01jun2013"d;
start_date_2 = "21jul2013"d;
end_date_2 = "18aug2013"d;
money_field = 6;
OUTPUT;
end;
when(treatment_ind = 7 and version = 0) do;
rk = 1;
start_date_1 = "11mar2013"d;
end_date_1 = "22may2013"d;
start_date_2 = "21feb2013"d;
end_date_2 = "24feb2013"d;
money_field = 34;
OUTPUT;
end;
otherwise;
end;
FORMAT start_date_1 end_date_1 start_date_2 end_date_2 DATE9.;
run;
下次请不要对整个标题加上大写字母。如果你能上传至少一个数据集的样本,那就更清楚了。干杯