There are many ways of doing this, here is one using associative arrays:
Names Default To Here(1);
// Sample data
dt = New Table("Untitled",
Add Rows(9),
New Column("C3", Numeric, "Continuous", Format("Best", 12), Set Values([1, 2, 3, ., ., ., ., ., .])),
New Column("S",
Numeric,
"Continuous",
Format("Best", 12),
Set Values([0.11, 0.12, 0.13, ., ., ., ., ., .])
),
New Column("I",
Numeric,
"Continuous",
Format("Best", 12),
Set Values([1.1, 1.2, 1.3, ., ., ., ., ., .])
),
New Column("C2", Numeric, "Continuous", Format("Best", 12), Set Values([1, 1, 1, 2, 2, 2, 3, 3, 3])),
New Column("S1", Numeric, "Continuous", Format("Best", 12), Set Values([., ., ., ., ., ., ., ., .])),
New Column("I1", Numeric, "Continuous", Format("Best", 12), Set Values([., ., ., ., ., ., ., ., .]))
);
wait(1);
// Formulas start
Column(dt, "S1") << Formula(
As Constant(
aa_slope_c3 = Associative Array(Eval List(:c3 << get values), Eval List(:s << get values));
);
aa_slope_c3[:c2];
);
Column(dt, "I1") << Formula(
As Constant(
aa_intercept_c3 = Associative Array(Eval List(:c3 << get values), Eval List(:i << get values));
);
aa_intercept_c3[:c2];
);
// If data is always like this, can be simplified to
dt << New Column("ss", Numeric, Continuous, Formula(
:S[:C2]
));
dt << New Column("ii", Numeric, Continuous, Formula(
:I[:C2]
));
If you don't need a formula you could also use joins/virtual joins.
Formulas can be found from the script or from attached data table
-Jarmo