JSL生成匹配列差值和平均值你好,
我希望在以下方面得到一些幫助:
附有下表的 JMP 文件。

我的典型/起始數據集包含:
1. 標識符“類型”
2.一組未知數量的具有相同前綴和不同數字後綴的列,例如 一個數字 1,一個數字 2,一個數字 3...
3. 第二組與上面 #2 中相同數量的列,具有與 #2 中相同的前綴和匹配後綴,例如 B num1、B num2、B num3...
我可以得到一些幫助來編寫一個 jsl 腳本來生成列來配對 A 組和 B 組列來計算:
公式( (:B 1.0 - :B 0.5) / (:A 1.0 - :A 0.5) ) ),
公式( (:B 1.3 - :B 0.5) / (:A 1.3 - :A 0.5) ) ),
公式( (:B 1.3 - :B 1.0) / (:A 1.3 - :A 1.0) ) ),
然後,生成平均值列(“B/A Avg”)以獲取創建的所有列的平均值。 請注意,上面的生成列可以是任意數量。 可以是3個,也可以是2個,也可以是6個……
歸根結底,我最感興趣的是獲得“B/A Avg”的最後一列,如果可以簡化腳本,則臨時列是可選的。
如果我可以澄清我的問題中的任何內容,請告訴我。 預先非常感謝。
自動化和腳本編寫基礎數據分析和建模回复:JSL 生成匹配列差值和平均值什麼決定了用於計算的列對?
回复:JSL 生成匹配列差值和平均值具有相同的後綴(數字)。 例如,0.5至0.5、1.0至1.0、1.3至1.3等...
回复:JSL 生成匹配列差值和平均值如果我有 A0.5、A1.0、A1.3、B0.5、B1.0 和 B1.3 列,我怎麼知道我到底需要 (B1.0-B0.5)/(A1.0- A0 .5)、(B1.3-B0.5)/(A1.3-A0.5) 和(B1.3-B1.0)/(A1.3-A1.0) 列?
回复:JSL 生成匹配列差值和平均值非常感謝您耐心地與我合作,對於沒有 100% 明確意圖表示歉意。
對於方程,它始終為: ( B num1 - B num2 ) / ( A num1 - A num2 )
由於我們總是會在 A 組和 B 組之間獲得相同的後綴集,因此我的目標是獲得 A 組之間所有可能的組合,這可以僅限於較高值後綴 - 較低值後綴。
或者,如果它簡化了腳本,我們可能會發現任何對之間的差異,比如包括兩者(B1.0-B0.5)/(A1.0-A0.5)和(B0.5-B1.0)/(A0.5-A1.0)。 這樣,平均值仍然與較高-較低相同。
回复:JSL 生成匹配列差值和平均值這是我創建您想要的新列的方法。
names default to here(1);
dt=current data table();
// Set Prefixes
pre1 = "A";
pre2 = "B";
// Get all levels using Pre1 columns to find the levels
theColumnNames = dt << get column names( string, continuous );
levels = {};
For Each( {col, i}, theColumnNames,
if(word(1,col," ")==pre1,
insert into(levels,trim(substr(col,length(pre1)+1)))
)
);
// Create new columns.
// This is accomplished by creating a character string that is the JSL statement that
// is required to create the new column and it's formula
meanColsList = {};
For( i = 2, i <= N Items( levels ), i++,
For( k = 1, k <= i - 1, k++,
Eval(
Parse(
"dt << New Column( \!"" || pre2 || "/" || pre1 || " " || levels[i] || "-" || levels[k] ||
"\!", formula( (:" || pre2 || " " || levels[i] || " - :" || pre2 || " " || levels[k] || ")
/ (:" || pre1 || " " || levels[i] || " - :" || pre1 || " " || levels[k] || ") ) );"
)
);
insert into( meanColsList, ":\!"" || pre2 || "/" || pre1 || " " || levels[i] || "-" || levels[k] || "\!"n");
);
);
Eval(
Parse(
"dt << New Column( \!"" || pre2 || "/" || pre1 || " Avg\!", formula( Sum(" ||
Concat Items( meanColsList, "," ) || ") / Number(" ||
Concat Items( meanColsList, "," ) || ")));"
)
);回复:JSL 生成匹配列差值和平均值這也可以提供一些想法
Names Default To Here(1);
dt = Open("$DOWNLOADS/Question - Auto Col Diff and Avg.jmp");
dt << Clear Column Selection << Clear Select;
col_list = dt << Get Column Names("String");
// Get column types
col_rgx_pattern = "^(.?) (\d+.\d+)";
aa = Associative Array();
For Each({col_name}, col_list,
rgx_result = Regex(col_name, col_rgx_pattern);
If(!IsMissing(rgx_result),
parts = Words(rgx_result);
If(N Items(parts) == 2,
If(!Contains(aa, parts[1]),
aa[parts[1]] = {};
);
Insert Into(aa[parts[1]], parts[2]);
);
);
);
// Check that all different columns have same number parts (ignored in this case)
// Create combinations
ordered_num_parts = Reverse(Sort List(aa[aa << first])); // sort from largest to smallest, works in this simple case
pairs = {};
For(i = 1, i <= N Items(ordered_num_parts) - 1, i++,
For(j = i + 1, j <= N Items(ordered_num_parts), j++,
cur_pair = Eval List({ordered_num_parts[i], ordered_num_parts[j]});
Insert Into(pairs, Eval List({cur_pair}));
);
);
// Create new columns
avg_expr = Expr(Mean());
For Each({pair}, pairs,
f_expr = Substitute(
Expr(
(_last_numerator_ - _first_numerator_) / (_last_denominator_ - _first_denominator_)
),
Expr(_last_numerator_), Name Expr(AsColumn(dt, "B " || pair[1])),
Expr(_first_numerator_), Name Expr(AsColumn(dt, "B " || pair[2])),
Expr(_last_denominator_), Name Expr(AsColumn(dt, "A " || pair[1])),
Expr(_first_denominator_), Name Expr(AsColumn(dt, "A " || pair[2]))
);
Eval(EvalExpr(new_col = dt << New Column("B/A " || pair[1] || "-" || pair[2], Numeric, Continuous, Formula(
Expr(Name Expr(f_expr))
))));
Insert Into(avg_expr, Name Expr(AsColumn((new_col << get name))));
);
Eval(EvalExpr(
dt << New Column("B/A AVG", Numeric, Continuous, Formula(
Expr(Name Expr(avg_expr))
));
));回复:JSL 生成匹配列差值和平均值非常感謝賈莫。 從這個例子中學到了很多新的腳本編寫方法。 感謝你的幫助。
回复:JSL 生成匹配列差值和平均值非常感謝你,吉姆,你的幫助。 非常簡單易懂。 欣賞它!