안녕하세요.특정 작업을 위해 이 JSL 함수를 만들었는데 더 좋은 방법이 있는지 궁금합니다.
내가 원하는 것은 인덱스 벡터가 있는 경우 벡터 요소의 값이 지정된 인덱스에 대해 1이고 그렇지 않으면 0인 지정된 링크의 표시기 벡터를 만드는 방법입니다.EG
[2, 3, 6] --> 길이가 10인 지시자 벡터로 변환합니다.
[0, 1, 1, 0, 0, 0, 1, 0, 0, 0]
사용 사례는 여러 조건을 기반으로 데이터 테이블에서 행의 하위 집합을 선택하는 것입니다. 여기서 각 조건에 대해 조건을 충족하는 행 번호의 벡터를 가져오고 모든 조건을 충족하는 행을 가져오려고 합니다.
// Loc Inverse Function
// This function converts a vector of positive integers (locvals) into an
// indicator vector of a specified length, n, with the values
// v[I] = 1 if I is in locvals, and 0 otherwise
// example
// Loc Inverse(6, [1,3])
// returns
// [1, 0, 1, 0, 0, 0]
*/
Loc Inverse = Function( {n, locvals},
v = J( n, 1, 0 );
v[locvals] = 1;
v;
);
예를 들어 사용 사례의 경우 세 가지 조건이 있는 경우 각 조건(v1, v2, v3)을 충족하는 벡터의 행 번호를 얻으므로 이렇게 합니다.
dt=current data table();
Loc Inverse = Function( {n, locvals},
v = J( n, 1, 0 );
v[locvals] = 1;
v;
);
// ...
// code to get v1, v2, v3
// ...
rowindicator1=Loc Inverse(n rows(dt), v1);
rowindicator2=Loc Inverse(n rows(dt), v2);
rowindicator3=Loc Inverse(n rows(dt), v3);
meet_all_conditions_indicator = rowindicator1 & rowindicator2 & rowindicator3;
rows_that_meet_all_conditions = Loc(meet_all_conditions_indicator);