표현식, 열 참조, 수식 및 열 이름 바꾸기에 대한 도움이 필요합니다.모두,
다음과 같은 경우 도움이 필요합니다.
문자열 형식의 열 이름이 있습니다.
이전 열을 기반으로 수식을 사용하여 새 열을 만들어야 합니다. 나는 이렇게 한다:
oldCol = "OldColumn";
Eval( Eval Expr( dt << New Column( "NewColumn", formula( As Column( Expr( oldCol ) ) ) ) ) );
그런 다음 나중에 스크립트에서 이전 열의 이름을 바꿔야 합니다. 나는 이렇게 한다:
Column(oldCol) << Set Name("NewOldColumn");이제 문제는 다음과 같은 형식의 새 열 공식이 있기 때문에 발생합니다.
As Column("OldColumn")OldColumn이 이름을 변경할 때 업데이트되지 않습니다.
의 형태로 가지고 싶습니다.
:OldColumn
하지만 어떻게 해야할지 모르겠습니다.
따라서 질문은 다음과 같습니다. 표현식을 어떻게 수정해야 합니까?
Eval( Eval Expr( dt << New Column( "NewColumn", formula( As Column( Expr( oldCol ) ) ) ) ) );
의 형태로 수식을 생성합니다. :OldColumn 의 형태가 아닌 열로("OldColumn") ?
사용할 전체 스크립트는 다음과 같습니다.
dt = New Table( "TestColumnsReferences",
Add Rows( 3 ),
New Column( "OldColumn", Character, "Nominal", Set Values( {"a", "b", "c"} ) )
);
oldCol = (dt << Get Column Names(string))[1];
//oldCol = "OldColumn";
Eval( Eval Expr( dt << New Column( "NewColumn", formula( As Column( Expr( oldCol ) ) ) ) ) );
Column(oldCol) << Set Name("NewOldColumn");고마워요, 엠.
소비자 및 시장 조사Re: 표현식, 열 참조, 수식 및 열 이름 변경에 대한 도움이 필요합니다.JSL Quote()에 대한 팁을 주셔서 감사합니다! 이제 모든 따옴표를 피할 필요가 없으므로 훨씬 더 깔끔합니다.
Re: 표현식, 열 참조, 수식 및 열 이름 변경에 대한 도움이 필요합니다.질문에서 설명한 "As Column"의 문제는 수식에 남아 있다가 나중에 열에서 참조하는 열의 이름을 변경하면(변경하는 경우) 수식이 유효하지 않게 된다는 것입니다.
귀하의 조합 Expr --> Name Expr --> As Column 작동합니다! As Column("string") 을 :string!
여기에 몇 가지 솔루션이 제공되었으며 JSL Quote가 포함된 솔루션이 정말 마음에 들었지만 이것이 제가 가장 좋아하는 새로운 솔루션입니다. 다시 스크립트를 다시 수행해야 합니다 
Re: 표현식, 열 참조, 수식 및 열 이름 변경에 대한 도움이 필요합니다.또 다른 옵션은 Eval(), EvalExpr(), Expr(), Name Expr() 및 As Column()의 조합입니다.
Names Default To Here(1);
dt = New Table("TestColumnsReferences", Add Rows(3),
New Column("OldColumn", Character, "Nominal", Set Values({"a", "b", "c"}))
);
oldCol = (dt << Get Column Names(string))[1];
//oldCol = "OldColumn";
Eval(Eval Expr(dt << New Column("NewColumn", formula(Expr(Name Expr(AsColumn(oldCol)))))));
Column(oldCol) << Set Name("NewOldColumn");Re: 표현식, 열 참조, 수식 및 열 이름 변경에 대한 도움이 필요합니다.개인적으로 나는 JSL 견적() 구문 강조 및 어휘 구문 분석을 유지하는 기능 -- 그런 다음 값을 :이름() 지시어, 이와 같이
dt = New Table( "TestColumnsReferences",
Add Rows( 3 ),
New Column( "OldColumn", Character, "Nominal", Set Values( {"a", "b", "c"} ) )
);
oldCol = (dt << Get Column Names(string))[1];
//oldCol = "OldColumn";
Eval( Parse( Eval Insert( JSL Quote(
dt << New Column( "NewColumn", Formula( :Name("^oldCol^") ) )
) ) ) );
Column(oldCol) << Set Name("NewOldColumn");Re: 표현식, 열 참조, 수식 및 열 이름 변경에 대한 도움이 필요합니다.예, 본질적으로 아래에 표시된 것과 동일한 접근 방식입니다. 대리자 대신에 평가 삽입 , 오른쪽?
Re: 표현식, 열 참조, 수식 및 열 이름 변경에 대한 도움이 필요합니다.알겠습니다. 알아냈습니다. 수식 부분의 경우 다음 체인을 사용하십시오.
Name Expr(Expr(Parse(Eval Insert(":#oldCol#", startChar="#"))))실제 스크립트 수식에서 실제로 "^"가 사용되는 REgEx를 사용하기 때문에 startChar="#"를 사용해야 했습니다.
따라서 전체 스크립트는 다음과 같습니다.
dt = New Table( "TestColumnsReferences",
Add Rows( 3 ),
New Column( "OldColumn", Character, "Nominal", Set Values( {"a", "b", "c"} ) )
);
oldCol = (dt << Get Column Names(string))[1];
//oldCol = "OldColumn";
Eval( Eval Expr( dt << New Column( "NewColumn", formula( Name Expr(Expr(Parse(Eval Insert(":#oldCol#", startChar="#")))) ) ) ) );
Column(oldCol) << Set Name("NewOldColumn");이렇게 공식은 :OldColumn 오히려 열로("OldColumn") 이제 수식을 깨지 않고 안전하게 열 이름을 바꿀 수 있습니다.
Re: 표현식, 열 참조, 수식 및 열 이름 변경에 대한 도움이 필요합니다.다음은 저에게 적합한 한 가지 접근 방식입니다.복잡한 JMP 열 이름을 처리하기 위해 이름 지정을 확장했습니다.이것은 독자를 약간 혼란스럽게 하지만 방법을 더 강력하게 만듭니다.
dt = New Table( "TestColumnsReferences",
Add Rows( 3 ),
New Column( "OldColumn+one", Character, "Nominal", Set Values( {"a", "b", "c"} ) )
);
oldCol = (dt << Get Column Names( string ))[1];
//oldCol = "OldColumn";
//Eval( Eval Expr( dt << New Column( "NewColumn", formula( As Column( Expr( oldCol ) ) ) ) ) );
Eval(
Substitute(
Expr(
dt << New Column( "NewColumn", formula( __oldCol__ ) )
),
Expr( __oldCol__ ), parse(":\!"" || oldCol || "\!"n")
)
);
Column( oldCol ) << Set Name( "NewOldColumn" );
Re: 표현식, 열 참조, 수식 및 열 이름 변경에 대한 도움이 필요합니다.나는 그렇게 하는 한 가지 방법을 봅니다(그러나 이 방법으로 하지 않는 것).
문자열이 아닌 열 이름을 참조로 가져온 다음 그냥 사용하십시오. 이름 Expr() :
oldCol = (dt << Get Column Names())[1];<BR />Eval( Eval Expr( dt << New Column( "NewColumn", formula( Name Expr( oldCol ) ) ) ) );
그러나 나는 이미 열 이름을 문자열로 가지고 있고 그것을 고수하고 싶습니다.