嘗試創建一個列並用公式填充它,但出現錯誤。查看更多... For (j=3, j<=10, j=j+2,
ColLen=Length(Char(Column name (j)));
ColName=Left (Char(Column Name(j)),ColLen -5);
NewCol=Substr(ColName,6);
New Column(
"Delta: "||NewCol,
Numeric,
Formula (
(Column (j)- Column(j+1))
)
)
);
自動化和腳本編寫回复:嘗試創建一列並用公式填充它,但出現錯誤。似乎工作“一次”(值沒問題) - 但是(至少對於我的測試用例)變體#1在您隨後打開它時報告公式錯誤:

變體#6 似乎解決了這個問題:

但是一旦Jmp關閉並且忘記了什麼,它肯定會失敗dt方法 ....
回复:嘗試創建一列並用公式填充它,但出現錯誤。就像Column()而不是column一樣有效!
回复:嘗試創建一列並用公式填充它,但出現錯誤。就像Column()而不是column一樣有效!
回复:嘗試創建一列並用公式填充它,但出現錯誤。不工作:(
回复:嘗試創建一列並用公式填充它,但出現錯誤。擺弄了一下之後
- 特別是:想知道為什麼 #1 沒有給出預期的結果:
dt = Open( "$Sample_data/iris.jmp" );
cols = {Sepal length,Sepal width, Petal length};
i = 2;
Eval( Eval Expr( dt << New Column( "new1", Formula( As Column( Expr( i ) ) ) ) ) ); //works but the formula is corrupted
Eval( Eval Expr( dt << New Column( "new2", Formula( As Column( Expr( Column(i) ) ) ) ) ) );
Eval( Eval Expr( dt << New Column( "new3", Formula( As Column( Expr( Char( cols[i] ) ) ) ))) );
Eval(Substitute(Expr(dt << New Column( "new4", Formula( __col__ ) )),Expr(__col__),Name Expr(As Column(i)) ));
Eval(Eval Expr(dt << New Column("new5", Formula(Expr(NameExpr(AsColumn(i)))))));
// new:
Eval( Eval Expr( dt << New Column( "new6", Formula( As Column( dt, Expr( i ) ) ) ) ) ); ...我發現了一個新的變體,不需要封閉名稱表達式使其發揮作用*)
有趣的 ...
*) 工作 -直到Jmp關閉並再次啟動
回复:嘗試創建一列並用公式填充它,但出現錯誤。關於這個主題的好帖子是使用 Eval Insert、Eval Expr、Parse 和 Substitute 將一個表達式插入另一個表達式。 在您的情況下,您確實需要更複雜的解決方案,因為如果您想要公式,則使用列索引而不是列名稱(大多數時候我建議使用名稱而不是索引)。 大多數時候我使用 Eval(EvalInsert()) 但替代也是不錯的選擇
Names Default To Here(1);
dt = New Table("Untitled",
Add Rows(3),
Compress File When Saved(1),
New Column("Column 1", Numeric, "Continuous", Format("Best", 12), Set Values([1, 2, 3])),
New Column("Column 2", Numeric, "Continuous", Format("Best", 12), Set Values([2, 3, 4])),
New Column("Column 3", Numeric, "Continuous", Format("Best", 12), Set Values([3, 4, 5])),
New Column("Column 4", Numeric, "Continuous", Format("Best", 12), Set Values([4, 5, 6])),
New Column("Column 5", Numeric, "Continuous", Format("Best", 12), Set Values([6, 7, 8]))
);
For(j = 1, j < 5, j = j + 2,
// ColLen = Length(Char(Column Name(j)));
// ColName = Left(Char(Column Name(j)), ColLen - 6);
// NewCol = Substr(ColName, 6);
new_col = Word(2, Column(dt, j) << get name, " ");
Eval(Eval Expr(
New Column("Delta: " || new_col, Numeric, Formula(
Expr(NameExpr(AsColumn(j))) - Expr(NameExpr(AsColumn(j + 1)))
))
));
);
您可能感興趣的一些附加功能/消息:< < 獲取列名稱,單詞() (還從腳本索引中搜索 Words()、Item() 和 Items()),對於每個() (如果您有 JMP16+)
回复:嘗試創建一列並用公式填充它,但出現錯誤。@mmarchandTSI , 我同意,
Formula(Column( ...
行不通的。
使用替代品怎麼樣:
For( j = 3, j <= 10, j = j + 2,
ColLen = Length( Char( Column Name( j ) ) );
ColName = Left( Char( Column Name( j ) ), ColLen - 5 );
NewCol = Substr( ColName, 6 );
Eval(Substitute(Expr(
New Column( "Delta: " || NewCol, Numeric, Formula( (__colA__ - __colB__) ) );
),Expr(__colA__),Name Expr(As Column(j)),Expr(__colB__),Name Expr(As Column(j+1)) ))
);
回复:嘗試創建一列並用公式填充它,但出現錯誤。這是因為 Column() 是對列本身的引用,而不是對列中的值的引用。我知道如何以一種醜陋的方式做你想做的事。以下腳本將同時運行,直到有人發布更漂亮的解決方案。
Names Default To Here( 1 );
For( j = 3, j <= 10, j = j + 2,
ColLen = Length( Char( Column Name( j ) ) );
ColName = Left( Char( Column Name( j ) ), ColLen - 5 );
NewCol = Substr( ColName, 6 );
Eval(
Parse(
"New Column( \!"Delta: " || NewCol || "\!",
Numeric,
Formula(
:\!"" ||
(Column( j ) << Get Name) || "\!"n - :\!"" || (Column( j + 1 ) << Get Name) || "\!"n
))"
)
);
);
回复:嘗試創建一列並用公式填充它,但出現錯誤。JSL 使用動態作用域——我相信您正在詞法作用域(大多數編程語言都使用該作用域)的隱式假設下工作。
因為 JSL 使用動態作用域,所以名稱的作用域解析j完成於運行,當公式計算名稱時j不再在範圍內,因此會出錯。
為了解決這個問題,您可以預先計算部分代碼,以便 JMP 沒有要在列公式中查找的變量:
For( j = 3, j <= 10, j = j + 2,
ColLen = Length( Char( Column Name( j ) ) );
ColName = Left( Char( Column Name( j ) ), ColLen - 5 );
NewCol = Substr( ColName, 6 );
Eval( Eval Expr(
New Column( "Delta: " || NewCol, Numeric, Formula( (Column( Expr( j ) ) - Column( Expr( j + 1 ) )) ) );
) )
);
回复:嘗試創建一列並用公式填充它,但出現錯誤。@淚之皇冠,基於你原來的JSL:
For( j = 3, j <= 10, j = j + 2,
ColLen = Length( Char( Column Name( j ) ) );
ColName = Left( Char( Column Name( j ) ), ColLen - 5 );
NewCol = Substr( ColName, 6 );
Eval(
Eval Expr(
New Column( "Delta: " || NewCol,
Numeric,
Formula( (As Column( Expr( Column Name( j ) ) ) - As Column( Expr( Column Name( j + 1 ) ) )) )
)
)
);
);我喜歡乾淨的 As Column("column name") 函數,它不像我的 Eval( Parse(...) ) 解決方案那樣難看。
回复:嘗試創建一列並用公式填充它,但出現錯誤。我應該指出,要從列引用轉到行值,只需輸入[] 。以下應該有效:
For( j = 3, j <= 10, j = j + 2,
ColLen = Length( Char( Column Name( j ) ) );
ColName = Left( Char( Column Name( j ) ), ColLen - 5 );
NewCol = Substr( ColName, 6 );
Eval( Eval Expr(
New Column( "Delta: " || NewCol, Numeric, Formula( (Column( Expr( j ) )[] - Column( Expr( j + 1 ) )[]) ) );
) )
);
回复:嘗試創建一列並用公式填充它,但出現錯誤。我應該指出——要從公式中的列引用轉到行值,請在列引用後放入 []
Column( 1)[] + Column( 2 )[]
回复:嘗試創建一列並用公式填充它,但出現錯誤。很酷的技巧:)
Column(1)[]
代替
Column(1)[row()]