중복된 행 항목을 선택하고 해당 색인을 저장한 다음 중복된 행을 포함하지 않는 새 목록을 만듭니다.안녕.
이것은 이 링크의 질문에 대한 후속 조치입니다. 해결됨: JMP 사용자 커뮤니티 선택에서 값 가져오기 . 이 토론이 끝나면(제공된 링크에) 특정 행을 선택하고 show() 함수를 사용하여 인쇄하는 jsl 방법이 있습니다. 다른 게시물(링크가 없어졌습니다)에는 Select Duplicated Row() 함수를 사용하여 중복된 행을 선택한 후 삭제하는 방법이 있었습니다.
내 목표는 중복된 행을 선택한 다음 테이블에서 선택한 열에 대한 색인을 얻는 것입니다. 예를 들어, 큰 클래스 테이블에서 연령 열에 대한 중복 항목을 찾고 싶습니다.
두 번째 목표는 중복된 행을 삭제하지 않고 고유한 행만 포함하는 새 열을 생성하는 것입니다.
어떤 지침이라도 감사하겠습니다.
dt_limit = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt_limit:age << Select Duplicate Rows( Match (:age, :age ) );
Group1List = (dt_limit:age[dt_limit << get selected rows]);
theCount = N Rows( dt << get selected rows);
Show( Group1List);
자동화 및 스크립팅기본 데이터 분석 및 모델링데이터 접근Re: 중복된 행 항목을 선택하고 해당 색인을 저장한 다음 중복된 행을 포함하지 않는 새 목록을 만듭니다.@Jed_Campbell 감사합니다. 이거 좋네요 정말 감사합니다!
추가 작업을 위해 해당 열을 목록으로 캡처하려고 합니다. 그 일을 도와주실 수 있나요? 감사해요!
Re: 중복된 행 항목을 선택하고 해당 색인을 저장한 다음 중복된 행을 포함하지 않는 새 목록을 만듭니다.스크립트 끝에 추가된 이 줄은 해당 열을 목록으로 가져와야 합니다.
future_list = as list (dt_limit:Unique << Get Values);
Re: 중복된 행 항목을 선택하고 해당 색인을 저장한 다음 중복된 행을 포함하지 않는 새 목록을 만듭니다.@Jed_Campbell 감사합니다. 완벽하게 작동합니다.
현재 제가 겪고 있는 또 다른 문제는 나이라는 하나의 열 대신 [나이, 키, 몸무게 등] 열 목록을 갖게 되면 어떻게 될까요? 코드는 어떻게 바뀔까요? 목록 항목을 열로 가져오기 위해 열과 평가의 조합을 사용해 보았습니다. 아래 코드가 작동한다는 것을 알고 있지만 모든 열 목록에서 작동하도록 수정하려면 어떻게 해야 합니까? As 열 (ListOfTargetCol[i])[i] )과 같은 것이 있습니까? 또는 :(ListOfTargetCol[i])[i] ); jmp가 목록의 i번째 항목을 가져온 다음 해당 열(열) i번째 항목을 가져오는 것을 의미합니까? 저는 jsl을 처음 접했고 어떻게 구성되어 있는지 잘 모르겠습니다. 이 문제를 극복하는 방법을 조언해 주십시오.
참고로 위에 제공해 주신 코드와 비슷한 코드를 사용하고 다음과 같은 내용을 추가해 보았습니다. 아래와 같은 문자열 이름 목록이면 또 다를지 궁금합니다. 정말 감사합니다!
ListOfTargetCol = { age, height, weight};
StringOfTargetCol = { "age", "height", "weight"};
... dt_limit:Unique[i] = dt_limit:( As coulmn(ListOfTargetCol[1])) [i]...
Re: 중복된 행 항목을 선택하고 해당 색인을 저장한 다음 중복된 행을 포함하지 않는 새 목록을 만듭니다.당신이 찾고 있는 것이 이와 같은 것인가요? 이를 수행하는 더 우아한 방법이 있을 수 있지만 여기에는 첫 번째 고유 행만으로 새 열을 만드는 한 가지 방법이 있습니다.
dt_limit = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt_limit << Select Duplicate Rows( Match (:age ) );
Group1List = (dt_limit << get selected rows);
theCount = N Items (Group1List);
//create a new column that has only the unique rows without deleting the duplicated row
dt_limit << Invert Row Selection;
UniqueList = dt_limit << Get Selected Rows;
dt_limit << new column ("Unique");
for each ({i}, UniqueList,
dt_limit:Unique[i] = dt_limit:age[i]
);Re: 중복된 행 항목을 선택하고 해당 색인을 저장한 다음 중복된 행을 포함하지 않는 새 목록을 만듭니다.선택 항목이 필요하지 않은 경우 수식/요약(또는 기타 여러 옵션)을 사용할 수도 있습니다.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
// Option1
new_col = dt << New Column("R1", Numeric, Continuous, Formula(
If(Row() == Col Min(Row(), :age), :age, .)
));
dt << Run Formulas;
new_col << Delete Formula;
// Option2
dt << New Column("Row", Numeric, "Continuous", Formula(Row()));
dt_summary = dt << Summary(
Group(:age),
Min(:Row),
Freq("None"),
Weight("None"),
statistics column name format("column"),
Link to original data table(0)
);
dt_summary << Delete Columns("N Rows");
Column(dt_summary, 1) << Set Name("R2");
dt << Update(With(dt_summary), Match Columns(:Row = :Row));
Close(dt_summary, no save);

Re: 중복된 행 항목을 선택하고, 해당 인덱스를 저장한 다음, 중복된 행을 포함하지 않는 새 목록을 만듭니다.@jthi, 도와주셔서 감사합니다! 두 솔루션 모두 잘 작동하지만, 사용해야 할 구문에 대해 여전히 혼란스럽습니다.
In the loop below, we have the dt:age[i] which iterates through the "age" column in the dt_limit loop. <BR />What if I want to have more than one column to iterate through.<BR /><BR /> The only solution I can find (and works with no error) is to copy past the loop for <BR />all the needed columns i.e. age, height, ..etc. It is just not efficient and will not work for a large number of columns. <BR /><BR />Any suggestions would be appreciated.
<BR />
for each ({i}, UniqueList,
dt_limit:Unique[i] = dt_limit:age[i]
);Re: 중복된 행 항목을 선택하고, 해당 인덱스를 저장한 다음, 중복된 행을 포함하지 않는 새 목록을 만듭니다.당신이 무엇을 하려고 하는지 정확히 모르겠습니다. Col Min에 byvars로 더 많은 열을 추가할 수 있습니다.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
// Option1
new_col = dt << New Column("R1", Numeric, Continuous, Formula(
If(Row() == Col Min(Row(), :age, :sex), :age, .)
));
dt << Run Formulas;
new_col << Delete Formula;

Col Minimum(이름, )
Re: 중복된 행 항목을 선택하고, 해당 인덱스를 저장한 다음, 중복된 행을 포함하지 않는 새 목록을 만듭니다.@jthi에게 감사드립니다. 맞습니다. 위에서 제안하신 대로 열을 더 추가할 수 있습니다. 그러나 솔루션을 일반화하려고 합니다. 제가 하려는 것은 평가할 열에 대한 사용자 입력을 받는 것입니다. 목록에 넣습니다. 그런 다음 모든 열을 평가합니다. 예를 들어, 사용자는 나이와 키만 선택할 수 있습니다. 가능한 한 유연한 코드가 필요합니다.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
// Option1
TargetList = {age, sex, height};
new_col = dt << New Column("R1", Numeric, Continuous, Formula(
If(Row() == Col Min(Row(), :age, :sex), :age, .)
));
dt << Run Formulas;
new_col << Delete Formula;Re: 중복된 행 항목을 선택하고, 해당 인덱스를 저장한 다음, 중복된 행을 포함하지 않는 새 목록을 만듭니다.표현식을 사용하여 공식을 작성할 수 있습니다.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
sel_cols = {"age", "sex", "height"};
colmin_expr = Expr(Col Min(Row()));
For Each({sel_col}, sel_cols,
Insert Into(colmin_expr, Name Expr(AsColumn(dt, sel_col)))
);
Eval(Substitute(
Expr(new_col = dt << New Column("R1", Numeric, Continuous, Formula(
If(Row() == _colminformula_, :age, .)
))),
Expr(_colminformula_), Name Expr(colmin_expr)
));
dt << Run Formulas;
new_col << Delete Formula;
또한 목록의 입력을 사용하여 요약 버전을 쉽게 수정할 수도 있습니다.