목록의 변수를 데이터 테이블의 행에 어떻게 할당합니까?행 수가 가변적인 데이터 테이블로 작업하고 있습니다. '이유 1'이라는 새 열에 정의할 범주형 설명을 할당하고 싶습니다. 이 '이유 1' 열은 '이름' 열이 내가 정의한 목록의 문자열과 일치할 때 할당됩니다.
'이름' 행 항목은 ::slitter, ::label 또는 ::case 목록의 항목과 정확히 일치합니다.
모든 행에 서로 다른 이유 1 코드를 할당한 다음 각각의 이유 1에 따라 데이터를 분석하려고 합니다.
dt1 << New Column("Reason 1", Character, "Nominal");
Nrows = N Rows(dt1);
For( i =1, i<=Nrows, i++
For( j=1, j<= N items( ::slitter ), j++,
If(:Name(i) == Eval(slitter(j)), :Reason 1(i) = "Slitter");
);
);
// %Slitter% description codes
slitter = {"TM2300-370",
"TM2300-380",
"TM2300-385",
"TM2300-390",
"TM2300-395",
"TM2300-400"};<BR /><BR />// %Label% description codes (8)<BR />::label = {"TM2300-020",<BR />"TM2300-025",<BR />"TM2300-070",<BR />"TM2300-075",<BR />"TM2300-080",<BR />"TM2300-085",<BR />"TM2300-090",<BR />"TM2300-095"};<BR /><BR />//%Case% description codes (7)<BR />::case = {"TM2300-030",<BR />"TM2300-035",<BR />"TM2300-040",<BR />"TM2300-045",<BR />"TM2300-050",<BR />"TM2300-055",<BR />"TM2300-060"};데이터 테이블스크립팅윈도우Re: 목록의 변수를 데이터 테이블의 행에 어떻게 할당합니까?어떤 이유로든 루프는 할당하려는 5개의 목록 중 하나의 특정 목록에 변수를 할당하지 않았습니다. 'Get rows where' 기능은 내가 원하는 것을 달성했습니다.
이 솔루션에 시간을 할애해 주셔서 감사합니다!
- 로건
Re: 목록의 변수를 데이터 테이블의 행에 어떻게 할당합니까?내 마음은 처음에 내가 하고 싶었던 것을 완료하기 위해 루프에 갔지만 이 대체 솔루션에 대해 감사합니다!
이것은 내가 원하는 대로 내 데이터를 정확하게 분류했습니다.
Re: 목록의 변수를 데이터 테이블의 행에 어떻게 할당합니까?get rows where 및 contains를 사용하는 또 다른 방법이 있습니다.루프가 필요하지 않습니다.
dt = data table("Sample Data Set-1");
// %Slitter% description codes
slitter = {"TM2300-370", "TM2300-380", "TM2300-385", "TM2300-390", "TM2300-395", "TM2300-400"};
match_rows = dt << get rows where(contains(slitter, :Name));
dt:Reason 1[match_rows] = "Slitter";Re: 목록의 변수를 데이터 테이블의 행에 어떻게 할당합니까?몇 가지 구문 오류가 있고, Contains() 함수를 사용하여 대체할 수 있는 일치 항목을 확인하는 비효율적인 For 루프가 있습니다.동일한 계산을 수행하기 위해 새 수식 열을 만드는 방법도 추가했습니다.
Names Default To Here( 1 );
dt1=current data table();
dt1 << New Column( "Reason 1", Character, "Nominal" );
// %Slitter% description codes
slitter = {"TM2300-370", "TM2300-380", "TM2300-385", "TM2300-390", "TM2300-395", "TM2300-400"};
Nrows = N Rows( dt1 );
For( i = 1, i <= Nrows, i++,
If( Contains( slitter, :Name[i] ) == 1,
:Reason 1[i] = "Slitter"
)
);
// or
dt1 << New Column( "Reason 2",
character,
formula(
If( Row() == 1,
slitter = {"TM2300-370", "TM2300-380", "TM2300-385", "TM2300-390", "TM2300-395", "TM2300-400"}
);
If( Contains( slitter, :Name ) == 1,
:Reason 2 = "Slitter"
);
)
);