JSL: 변수 열 이름을 사용하여 수식 만들기안녕,
저는 실제로 간단한 일(적어도 그렇게 생각했습니다)을 하고 싶습니다. 즉, 변수 열 이름이 포함된 수식과 함께 JSL을 사용하여 새 열을 생성하는 것입니다. 이미 "열, 열, 이름, 이름, 평가, 구문 분석 등" 명령의 여러 조합을 시도하고 포럼을 검색했지만 시도한 모든 결과에서 수식을 평가할 수 없다는 오류가 발생했습니다.
내가 하고 싶은 일의 예:
"열 1"은 내 데이터 테이블의 열입니다.
a = "column 1";
new column("test", formula(a*2));
"test" 열에는 "열 1"에 2를 곱하는 수식이 포함되어야 합니다.
도움을 주셔서 감사합니다.
달라
Re: JSL: 변수 열 이름을 사용하여 수식 만들기효과적인 해결책을 찾으려고 노력한 후 결국 포기하고 JMP 지원팀에 어떻게 하면 좋을지 문의했습니다. Wendy는 친절하게도 핵심 라인을 보여줬고 데모로 for 루프에 포함시켰습니다. 제가 포함하고 있는 코드는 현재 데이터 테이블에 abc 및 def라는 이름의 2개 열이 있고 여기에는 선택한 몇 개의 데이터 행이 있다고 가정합니다. 그런데 Wendy Murphrey와 Rosemary Lucas가 쓴 Jump into JMP Scripting이라는 새로운 SAS Press 책이 있는데, 이 책은 스크립팅에 관한 매우 유용한 책입니다. 예제에 사용된 Expr 및 Eval Expr을 다룹니다.
dt = Current Data Table();
cols = {abc, def};
nlist = N Items(cols);
For( i = 1, i <= nlist, i++,
newColExpr = Expr(
dt << New Column( char(cols[i])||"*2", Numeric, Formula( Expr( cols[i] ) * 2 ) )
);
Eval( Eval Expr( newColExpr ) );
)Re: JSL: 변수 열 이름을 사용하여 수식 만들기때로는 가장 간단한 것도 JSL에서는 이해하기 어려울 수 있습니다 
다음은 몇 가지 접근 방식입니다.
new column("test",formula( as column("column 1")*2 ));
또는
a = "column 1";
new column("test",formula( a[]*2 ));
구문의 논리는 다음과 같습니다. 첫 번째 예제에서는 "열 1"을 숫자 열로 처리하려고 합니다. 두 번째 예제에서 "[]"는 a가 숫자 배열임을 나타냅니다.
도움이 되길 바랍니다
Re: JSL: 변수 열 이름을 사용하여 수식 만들기답변해 주셔서 감사합니다. 하지만 안타깝게도 도움이 되지 않습니다.
첫 번째 방법은 제가 원하는 방식이 아니었습니다. 왜냐하면 변수에서 열 이름을 꺼내야 하기 때문입니다(변할 수 있기 때문입니다).
두 번째 방법은 JMP가 수식에 실제 열 이름을 삽입하지 않기 때문에 작동하지 않습니다. 수식 변경 대화 상자에 들어가면 제안하신 대로 "a[Empty()] * 2"라고 나오는데, 저는 거기에 ":Column1 * 2" 같은 것이 필요합니다.
다른 제안이 있나요?Re: JSL: 변수 열 이름을 사용하여 수식 만들기제가 두 번째 예시로 제시한 내용은 다음과 같아야 한다고 생각합니다.
a = Column("column 1");
new column("test",formula( a[]*2 ));
Re: JSL: 변수 열 이름을 사용하여 수식 만들기@mpb: 잘 되네요! 알려주셔서 감사하고, 책 추천도 해주셔서 감사합니다!Re: JSL: 변수 열 이름을 사용하여 수식 만들기고맙습니다. 잘 되겠네요!Re: JSL: 변수 열 이름을 사용하여 수식 만들기아직 추가 질문이 하나 있습니다.
결국 제가 하고 싶은 것은 목록의 각 항목에 대해 새 열을 만드는 것입니다. Stig의 솔루션에서 열 수식은 여전히 "a[]" 변수에 따라 달라지고 (제가 선호하는 것처럼) "Column 1" 열 이름에는 영향을 받지 않습니다. 따라서 다음 스크립트에서 계산된 열 값을 변경하지 않고는 "a[]"를 변경할 수 없습니다. 즉, 제가 제안하는 방법은 효과가 없습니다. (collist의 길이와 열 이름은 변경될 수 있으므로 루프가 필요합니다.)
collist = {"column 1", "column 2"};
for (k=1, k<=length(collist), k++,
a = Column(collist);
new column(concat("test",char(k)), formula( a[]*2 ));
);
formula() 문에 목록 요소를 직접 삽입하는 것도 작동하지 않습니다. 다른 제안이 있으신가요?
달라
Re: JSL: 변수 열 이름을 사용하여 수식 만들기다음 코드를 사용하면:
dt = Current Data Table();
a = Column("height");
dt << New Column("test1",formula(a[]*2));
a = Column("weight");
dt << New Column("test2",formula(a[]*2));
test1과 test2 열 모두 수식이 동일한 변수 a를 참조하더라도 올바르게 계산됩니다. 따라서 원칙적으로 루프 내의 코드에는 문제가 없습니다. 그러나 새 열이 테이블에서 계산된 열로 동작하도록 하려면 이 방법이 효과적이지 않습니다. 따라서 ":column 1 * 2" 수식을 사용하여 코드에서 열을 생성하는 방법에 대한 의문이 여전히 남습니다.
Re: JSL: 변수 열 이름을 사용하여 수식 만들기아, 이제야 제가 이전에 올린 글이 전부 표시되지 않은 걸 알았습니다... 죄송합니다.
네, 열의 동작이나 적어도 값을 유지해야 합니다. 그래서 수식을 계산한 후 바로 삭제해 보려고 했습니다. 그런데 "수식... -> 지우기"처럼 수식을 삭제하고 값을 그대로 유지하는 명령문을 찾을 수 없었습니다. 이 기능을 어떻게 사용하는지 아시는 분 계신가요?
그것이 가장 좋은 해결책은 아니겠지만 지금 당장은 나에게 충분합니다.Re: JSL: 변수 열 이름을 사용하여 수식 만들기이제 열에서 값을 읽어 벡터에 저장하고 계산된 값을 새 열에 쓰는 해결책을 만들었습니다.
하지만 저는 여전히 미해결 질문에 대한 답변에 관심이 있습니다.
달라