'select where'및 'name selection in column'에서 매개 변수 사용안녕하세요,
X와 Y의 두 열로 구성된 데이터 테이블을 가져 와서 데이터 테이블의 여러 행을 선택하고 이름을 지정해야합니다. 이것은 xy 데카르트 공간에서 20 개의 직사각형을 선택하고 숫자 (1에서 20까지)로 이름을 지정하는 것에 해당합니다 (이미지 작업 중입니다).
스크립트를 작성했지만 작동하지 않습니다. 두 가지 문제를 해결해야한다고 생각합니다. 1) 매개 변수를 어떻게 사용할 수 있습니까? 'select where'인수에서 X1, X2, ..를 참조하십시오. 2) 매개 변수를 어떻게 사용할 수 있습니까 ( '열의 이름 선택'인수에서 n_patch 참조)?
감사합니다.
다음은 스크립트입니다.
dt = Current Data Table();
X0 = 2332;
Y0 = 558;
n_patch = 0;
delta_x = 100;
delta_y = 100;
dist_y = 488;
dist_x = 656;
L_x = 500;
L_y = 500;
For( n_x = 1, n_x <= 4, n_x++,
For( n_y = 1, n_y <= 5, n_y++,
Xc = X0 - (n_x - 1) * (dist_x) + L_x / 2;
Yc = Y0 + (n_y - 1) * (dist_y) + L_y / 2;
n_patch = n_patch + 1;
X1 = Xc - delta_x;
X2 = Xc + delta_x;
Y1 = Yc - delta_y;
Y2 = Yc + delta_y;
dt << Row Selection(
Select where( (:X >= X1 & :X <= X2) & (Y >= Y1 & Y <= Y2) )
);
dt << Name Selection in Column(
Column Name( "Patch#" ),
Selected( ("n_patch") ),
Unselected( "" )
);
)
);
데이터 테이블스크립팅Re : 'select where'및 'name selection in column'에서 매개 변수 사용안녕하세요 @MFVIT ,
데이터 테이블 자체에서 무언가를 찾는 대신 X1 및 Y1의 값이 스크립트에서 평가되는지 확인해야합니다.이 문제는 Eval Insert, Eval Expr, Parse 및 Substitute를 사용하여 한 표현식을 다른 표현식에 삽입합니다. . Eval (Eval Expr ())을 사용하여 이것이 발생하는지 확인할 수 있습니다. 다음은 예제 데이터 테이블과 함께 코드를 사용하는 예제입니다.
Names default to here(1);
dt = New Table( "Example Data",
Add Rows( 10000 ),
New Column( "X", Numeric, "Continuous", Format( "Best", 12 ),
Formula( Random Uniform( 0, 10000 ) ) ),
New Column( "Y", Numeric, "Continuous", Format( "Best", 12 ),
Formula( Random Uniform( 0, 10000 ) ) )
);
X0 = 2332;
Y0 = 558;
n_patch = 0;
delta_x = 100;
delta_y = 100;
dist_y = 488;
dist_x = 656;
L_x = 500;
L_y = 500;
For( n_x = 1, n_x <= 4, n_x++,
For( n_y = 1, n_y <= 5, n_y++,
Xc = X0 - (n_x - 1) * (dist_x) + L_x / 2;
Yc = Y0 + (n_y - 1) * (dist_y) + L_y / 2;
n_patch = n_patch + 1;
X1 = Xc - delta_x;
X2 = Xc + delta_x;
Y1 = Yc - delta_y;
Y2 = Yc + delta_y;
Eval( Eval Expr(
dt << Row Selection(
Select where( (:X >= Expr( X1 ) & :X <= Expr( X2 )) & (:Y >= Expr( Y1 ) & :Y <= Expr( Y2 ) ) )
);
) );
dt << run formulas;
dt << Name Selection in Column(
Column Name( "Patch#" || char( n_patch ) ),
Selected( "n_patch = " || char( n_patch ) ),
Unselected( "" )
);
)
);Re : 'select where'및 'name selection in column'에서 매개 변수 사용안녕하세요, 신속한 답변에 감사드립니다.
귀하의 코드는 나에게 매우 유용하며 올바른 길을 가고 있다고 생각합니다. 그러나 여전히 작동하지 않는 것이 있습니다.
코드를 실행하려고했는데 이름이 'Patch # 1', 'Patch # 2'등 많은 열이 추가되는 것을 보았습니다. 그래서 줄을 변경했습니다.
Column Name( "Patch#" || char( n_patch ) )
와
Column Name( "Patch#")
이름이 Patch # 인 열 하나만 필요하기 때문입니다.
그러나 코드는 내가 선택 될 것으로 예상하는 것을 선택하지 않습니다. patch5, 10, 15 및 20 만 선택하고 다른 패치는 선택하지 않으며 선택한 행은 패치에 해당하지 않습니다.
따라서 선택 명령이 제대로 작동하는지 잘 모르겠습니다.
도움을 주셔서 감사합니다.
마르첼로.
Re : 'select where'및 'name selection in column'에서 매개 변수 사용JMP의 이전 버전을 사용 중일 수 있으므로 이것이 작동하는지 확실하지 않습니다 (열에서 행 선택 또는 이름 선택을 사용하지 않음).
<<로 관심있는 행을 가져올 수 있습니다. 여기서 행을 가져온 다음 column () [rows]로 값을 설정할 수 있습니다.
dt << New Column("Patch#", Character);
For( n_x = 1, n_x <= 4, n_x++,
For( n_y = 1, n_y <= 5, n_y++,
Xc = X0 - (n_x - 1) * (dist_x) + L_x / 2;
Yc = Y0 + (n_y - 1) * (dist_y) + L_y / 2;
n_patch = n_patch + 1;
X1 = Xc - delta_x;
X2 = Xc + delta_x;
Y1 = Yc - delta_y;
Y2 = Yc + delta_y;
wantedRows = dt << get rows where(:X >= X1 & :X <= X2 & :Y >= Y1 & :Y <= Y2);
Column(dt, "Patch#")[wantedRows] = char(n_patch);
)
);