다른 테이블의 모든 열에 수식을 적용하는 방법은 무엇입니까?테이블을 가져와 모든 열의 모든 함수에 이동 평균을 적용하려고 합니다. 아래 스크립트는 여기 다른 스레드에서 본 내용을 바탕으로 제가 시도한 것입니다. 새로운 테이블을 만든 후 원본을 참조하면서 기능을 적용하는 것이 목표입니다. 그러나 범위가 지정된 데이터 테이블 액세스 오류가 계속 발생합니다.
Test = Open("C:\Users\abrokaw\Desktop\JMP MA Test Table.jmp"); //open value data table
Testcols = Test << Get Column Names( string ); //get column names
TestMA = New Table( "Test Table Smoothed" ); //make new table
TestMA << add rows(nrows(Test)); //make new table match rows with raw table
For( i = 1, i <= N Cols( Test ), i++,
Eval(
Parse(
"TestMA << New Column( \!"MA_" || Testcols[i] || "\!",
numeric,
continuous,
formula( test:" ||
Testcols[i] || "Col Moving Average( :Value, 1, 2, 2 ) ) )'"
)
)
);
TestMA << delete columns("column 1");
자동화 및 스크립팅기본 데이터 분석 및 모델링Re: 다른 테이블의 모든 열에 수식을 적용하는 방법은 무엇입니까?테스트 테이블의 열에 대한 참조를 잘못된 위치에 배치했습니다. 또한 형식 사용에서 각 값 설정 사용으로 변경했습니다. 최종 결과 계산은 동일하지만 해당 열은 수식 열이 아닙니다. 이로 인해 새 데이터 테이블이 테스트 테이블과 독립적이게 됩니다. For() 루프의 종료 값도 변경했습니다. 전후에 2개의 행을 포함하므로 nrows-2 이상으로 계산할 수 없습니다.
names default to here(1);
Test = Open( "$SAMPLE_DATA/blood pressure.jmp" ); //open value data table
Testcols = Test << Get Column Names( string, continuous ); //get column names
TestMA = New Table( "Test Table Smoothed" ); //make new table
TestMA << add rows( N Rows( Test ) ); //make new table match rows with raw table
For( i = 1, i <= N Cols( Test )-2, i++,
Eval(
Parse(
"TestMA << New Column( \!"MA_" || Testcols[i] ||
"\!",
numeric,
continuous,
set each value( Col Moving Average( test:" || Testcols[i] || ", 1, 2, 2 ) ) )"
)
);
);
TestMA << delete columns( "column 1" );
마지막으로 미리보기 화면 상단의 JSL 아이콘을 이용해 코드를 입력해주세요. 훨씬 쉽게 읽을 수 있습니다.
코드에는 실제로 Eval(Parse()) 코드의 복잡성이 필요하지 않습니다. 공개 코드를 사용할 수 있습니다
Names Default To Here( 1 );
Test = Open( "$SAMPLE_DATA/blood pressure.jmp" ); //open value data table
Testcols = Test << Get Column Names( string, continuous ); //get column names
TestMA = New Table( "Test Table Smoothed" ); //make new table
TestMA << add rows( N Rows( Test ) ); //make new table match rows with raw table
For( i = 1, i <= N Cols( Test ) - 2, i++,
TestMA << New Column( "MA_" || Testcols[i],
numeric,
continuous,
set each value( Col Moving Average( test:Testcols[i], 1, 2, 2 ) )
)
);
TestMA << delete columns( "column 1" );
Re: 다른 테이블의 모든 열에 수식을 적용하는 방법은 무엇입니까?Subset을 사용하여 열을 복사할 수도 있습니다(이렇게 하면 테이블 스크립트 등도 복사되므로 이점이나 문제가 될 수 있음). 하위 집합 옵션을 사용하고 계산에 수식 열을 사용하는 경우 수식 복사(0)를 사용해야 합니다.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
cont_cols = dt << Get Column Names(string, continuous);
ma_cols = {};
For(i = 1, i <= N Items(cont_cols), i++, // could use For Each but I try to avoid ... Each loops nowadays
//Eval(EvalExpr()) isn't necessary here but makes debugghing much easier
new_col = Eval(EvalExpr(
dt << New Column("MA_" || cont_cols[i], Numeric, Continuous, Formula( // I also try to avoid Set Each Value in cases like this so I use Formula here
Col Moving Average(Expr(NameExpr(AsColumn(dt, cont_cols[i]))), 1, 2, 2)
));
));
Insert Into(ma_cols, new_col << get name);
);
dt_new = dt << Subset(All Rows, Columns(ma_cols), Copy Formula(0), Output Table("Moving Averages"));
dt << Delete Columns(ma_cols);Re: 다른 테이블의 모든 열에 수식을 적용하는 방법은 무엇입니까?고마워요, 짐. 이 변경 사항은 내가 만든 테스트 데이터 세트에 적용됩니다. 그러나 실제 데이터 세트에서도 동일한 오류 메시지가 나타나는 문제가 여전히 발생하고 있습니다. 실제 데이터 세트에서 테스트 세트로 열 이름을 복사할 때 거기에서도 동일한 오류가 발생하기 때문에 이것이 열 이름과 관련이 있다고 생각합니다. 이 문제를 일으킬 수 있는 열 이름에 특정 문자가 있습니까?