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;

下次请不要对整个标题加上大写字母。如果你能上传至少一个数据集的样本,那就更清楚了。干杯