중첩된 if 및 else 문에 필요한 도움말if else 문을 사용하여 특정 FS*/SS*를 CAT1 및 CAT2로 버킷합니다. CAT1/CAT2에 속하지 않는 나머지 FS*/SS*는 모두 CAT3으로 분류해야 합니다.
CAT3의 다른 부분을 작성하는 데 문제가 있습니다. 도움을 주시면 감사하겠습니다.
cdt = open("temp\data.csv");
cdt=current data table();
sum_lst2 = {};
sum_lst3 = {};
sum_lst4 = {};
col_lst2 = cdt << get column names( Numeric );
For( i = 1, i <= N Items( col_lst2 ), i++,
colname = Column( col_lst2[i] ) << get name;
If( Contains( {"SS008","SS009","SS010","SS015","SS053","FS9429","FS9792","FS9906","FS9908", "FS1302","FS1305","FS1308","FS1360","FS1373","FS2744","FS4621","FS4625","FS4630","FS4640","FS4681","FS4830"}, colname ) | (colname >= "FS2900" & colname <= "FS2950") | (colname >= "FS3400" & colname <= "FS3450"),
Insert Into( sum_lst2, col_lst2[i] )
); ///Cat1//
If( Contains( {"SS098","SS090"}, colname ) | (colname >= "FS9700" & colname <= "FS9791") | (colname >= "FS9793" & colname <= "FS9799"),
Insert Into( sum_lst4, col_lst2[i] )
);//Cat2//
If( Contains( {"SS019","SS027","SS035","FS9901"}, colname ) | (colname >= "FS3451" & colname <= "FS3499"),
Insert Into( sum_lst3, col_lst2[i] )
);//Cat3
);| 안건 | FS0100 | FS0847 | FS0875 | FS0876 | FS0877 | FS1059 | FS1061 | FS1090 | FS1315 | FS1501 | FS1503 | FS1505 | FS1537 | FS1539 | FS1541 | FS1543 | FS1559 | FS1590 | FS1930 | FS1933 | FS2706 | FS2740 | FS2742 | FS2745 | FS3416 | FS3417 | FS3418 | FS3422 | FS3423 | FS3455 | FS3469 | FS3471 | FS3492 | FS3493 | FS5391 | FS9429 | FS9792 | FS9901 | FS9906 | SS001 | SS008 | SS010 | SS013 | SS015 | SS019 | SS027 | SS034 | SS053 | SS094 | SS097 | SS099 |
| 1 | 132 | 1 | | | | | | | | | | | | | | | | | 삼 | | | | | | | | | | | | | | | | | | | | 1 | 132 | 1 | | | | 삼 | | | | | | 1 |
| 2 | 600 | 2 | | | | | | | | | | | | | | | | | 7 | 2 | | 1 | 4 | | | | 5 | | | 1 | 4 | | | | | 1 | 1 | 1 | 2 | 600 | 2 | | 0 | | 9 | 5 | 10 | | 1 | 1 | 삼 |
| 삼 | 562 | | | | | 1 | | | | | | | | | | | | | 9 | | | 1 | 1 | | | 1 | 1 | 1 | 2 | 1 | 1 | 1 | 1 | 2 | | | | 2 | 1 | 562 | | 1 | | | 9 | 2 | 11 | | | | 삼 |
| 4 | 527 | 2 | | 2 | 1 | | 2 | 1 | | 7 | | 2 | 4 | 삼 | 삼 | 2 | | 24 | 18 | 2 | 삼 | | | 1 | 2 | | 1 | | 1 | | 4 | | 1 | 1 | 1 | 삼 | | | 2 | 527 | 5 | 삼 | | 45 | 20 | 4 | 10 | 1 | 삼 | | 2 |
| 5 | 322 | | 1 | | | | | | 1 | | 2 | | | | | | 1 | | 7 | | | | 삼 | | | | | | | | | | | 2 | | | | | 삼 | 322 | 1 | | 1 | 삼 | 7 | 삼 | 2 | | | 0 | 삼 |
고급 통계 모델링품질 및 프로세스 엔지니어링Re: 중첩된 if 및 else 문에 대한 도움이 필요합니다.모든 제안에 감사드립니다. 두 개의 else 문을 추가하고 마지막 else 문에 포함 조건을 추가하여 마침내 작동하게 할 수 있었습니다.
For( i = 1, i <= N Items( col_lst2 ), i++,
colname = Column( col_lst2[i] ) << get name;
If(
Contains({"FS9429", "FS9792", "FS9906","FS1156","FS1157"},colname) | (colname >= "FS800" & colname <= "FS899") |(colname >= "FS901" & colname <= "FS916") |
(colname >= "FS954" & colname <= "FS965") |(colname >= "FS1059" & colname <= "FS1063") |(colname >= "FS1348" & colname <= "FS1363") |(colname >= "FS1374" & colname <= "FS1379") |
(colname >= "FS1500" & colname <= "FS1599") | (colname >= "FS2581" & colname <= "FS2586") | (colname >= "FS2900" & colname <= "FS2950") | (colname >= "FS3400" & colname <= "FS3450") |(colname >= "FS5300" & colname <= "FS5399") |
(colname >= "FS6700" & colname <= "FS6799"),
Insert Into( sum_lst2, col_lst2[i] )///CAT1//
, // Else
Contains( {"FS9700"}, colname ) | (colname >= "FS9701" & colname <= "FS9791") | (colname >= "FS9793" & colname <= "FS9799")
,
Insert Into( sum_lst4, col_lst2[i] ) //CAT2//
, // Else
Contains( colname, "FS" ) & (colname > "FS0100"),
Insert Into( sum_lst3, col_lst2[i] )///CAT3
);
);
Eval( Eval Expr( cdt << New Column( "CAT1", formula( Sum( Expr( sum_lst2 ) ) ) ) ) );
Eval( Eval Expr( cdt << New Column( "CAT3", formula( Sum( Expr( sum_lst3 ) ) ) ) ) );
Eval( Eval Expr( cdt << New Column( "CAT2", formula( Sum( Expr( sum_lst4 ) ) ) ) ) );Re: 중첩된 if 및 else 문에 대한 도움이 필요합니다.스크립트가 열 이름에서 FS를 확인하는 마지막 Else 문으로 이동하는 경우 정의에 따라 해당 열은 Cat1 또는 Cat2에 포함되지 않은 것입니다. 따라서 열은 Cat1과 Cat3 모두에 배치되지 않습니다. Cat1 열이 식별되면 코드는 이를 오른쪽 목록에 삽입한 다음 For() 루프의 다음 반복으로 이동합니다. Else 부분을 실행할 필요가 없기 때문에 체인을 계속 실행하지 않습니다.
나는 그것을 시도해보고 그것이 작동하는지 확인할 것입니다. 사과드립니다. 귀하가 요청하는 내용이 무엇인지 완전히 명확하지는 않지만 이것이 도움이 되기를 바랍니다.
Re: 중첩된 if 및 else 문에 대한 도움이 필요합니다.Cat 1과 Cat2의 일부인 FS 열을 제외해야 하기 때문에 이는 도움이 되지 않습니다.
고양이 1 -
{"SS008", "SS009", "SS010", "SS015", "SS053", "FS9429", "FS9792", "FS9906", "FS9908", "FS1302", "FS1305", "FS1308", "FS1360", "FS1373",
"FS2744", "FS4621", "FS4625", "FS4630", "FS4640", "FS4681", "FS4830"},
colname
) | (colname >= "FS2900" & colname <= "FS2950") | (colname >= "FS3400" & colname <= "FS3450"),고양이 2 -
Contains( {"SS098", "SS090"}, colname ) | (colname >= "FS9700" & colname <= "FS9791") | (colname >= "FS9793" & colname <= "FS9799"),
Insert Into( sum_lst4, col_lst2[i] )
Cat3 - Cat1 및 Cat2의 일부인 모든 FS* 열
Re: 중첩된 if 및 else 문에 대한 도움이 필요합니다.가지고 있는 마지막 Else 문의 경우(아래에 표시된 스니펫):
Insert Into( sum_lst3, col_lst2[i] )///CAT3
아래와 같이 마지막으로 중첩된 If() 문을 하나 추가하면 어떨까요? 그런 다음 Else 문이 없습니다.
If(
Contains( colname, "FS" ),
Insert Into( sum_lst3, col_lst2[i] )
)///CAT3, no ELSE statement
Re: 중첩된 if 및 else 문에 대한 도움이 필요합니다.문제가 무엇인지 알아냈습니다. Cat3의 경우 열 형식을 수정한 후 범위 e15에서 큰 값을 얻었습니다. 그 이유는 테이블에 열이 몇 개 더 있기 때문입니다.
남은 FS*와 함께 Cat3의 경우 내 스크립트는 다른 열의 값을 합산합니다.
else 문에서 열 이름이 FS*인 열만 어떻게 고려합니까?
| 안건 | 위치 | 오퍼 | TOTAL_테스트됨 | TOTAL_GOOD | TOTAL_BAD | 테스트 날짜 | 패키지 | 박사 | Prgnm | 주 | FS0100 | FS0847 | FS0875 | FS0876 | FS0877 | FS1059 | FS1061 | FS1090 | FS1315 | FS1501 | FS1503 | FS1505 | FS1537 | FS1539 | FS1541 | FS1543 | FS1559 | FS1590 | FS1930 | FS1933 | FS2706 | FS2740 | FS2742 | FS2745 | FS3416 | FS3417 | FS3418 | FS3422 | FS3423 | FS3455 | FS3469 | FS3471 | FS3492 | FS3493 | FS5391 | FS9429 | FS9792 | FS9901 | FS9906 |
| | | | | | | | | | | | 132 | 1 | | | | | | | | | | | | | | | | | 삼 | | | | | | | | | | | | | | | | | | | | 1 |
| | | | | | | | | | | | 600 | 2 | | | | | | | | | | | | | | | | | 7 | 2 | | 1 | 4 | | | | 5 | | | 1 | 4 | | | | | 1 | 1 | 1 | 2 |
| | | | | | | | | | | | 562 | | | | | 1 | | | | | | | | | | | | | 9 | | | 1 | 1 | | | 1 | 1 | 1 | 2 | 1 | 1 | 1 | 1 | 2 | | | | 2 | 1 |
| | | | | | | | | | | | 527 | 2 | | 2 | 1 | | 2 | 1 | | 7 | | 2 | 4 | 삼 | 삼 | 2 | | 24 | 18 | 2 | 삼 | | | 1 | 2 | | 1 | | 1 | | 4 | | 1 | 1 | 1 | 삼 | | | 2 |
| | | | | | | | | | | | 322 | | 1 | | | | | | 1 | | 2 | | | | | | 1 | | 7 | | | | 삼 | | | | | | | | | | | 2 | | | | | 삼 |
Re: 중첩된 if 및 else 문에 대한 도움이 필요합니다.내 생각엔 당신이 매우 가까운 것 같아요! 두 번째 If() 문을 너무 빨리 닫았습니다. CAT2에 대해서는 모두 0을 얻지만 CAT3에는 이제 값이 있습니다. 이 시점에서 CAT2의 값을 기대한다면 좀 더 많은 작업이 필요할 수 있습니다.
cdt = Current Data Table();
sum_lst2 = {};
sum_lst3 = {};
sum_lst4 = {};
col_lst2 = cdt << get column names( Numeric );
For( i = 1, i <= N Items( col_lst2 ), i++,
colname = Column( col_lst2[i] ) << get name;
If(
Contains(
{"SS008", "SS009", "SS010", "SS015", "SS053", "FS9429", "FS9792", "FS9906", "FS9908", "FS1302", "FS1305", "FS1308", "FS1360", "FS1373",
"FS2744", "FS4621", "FS4625", "FS4630", "FS4640", "FS4681", "FS4830"},
colname
) | (colname >= "FS2900" & colname <= "FS2950") | (colname >= "FS3400" & colname <= "FS3450"),
Insert Into( sum_lst2, col_lst2[i] ), ///CAT1//
If( Contains( {"SS098", "SS090"}, colname ) | (colname >= "FS9700" & colname <= "FS9791") | (colname >= "FS9793" & colname <= "FS9799"),
Insert Into( sum_lst4, col_lst2[i] ), //CAT2//
Insert Into( sum_lst3, col_lst2[i] )///CAT3
)
)
);
Eval( Eval Expr( cdt << New Column( "CAT1", formula( Sum( Expr( sum_lst2 ) ) ) ) ) );
Eval( Eval Expr( cdt << New Column( "CAT3", formula( Sum( Expr( sum_lst3 ) ) ) ) ) );
Eval( Eval Expr( cdt << New Column( "CAT2", formula( Sum( Expr( sum_lst4 ) ) ) ) ) );Re: 중첩된 if 및 else 문에 대한 도움이 필요합니다.다음은 귀하의 코드를 재작업한 것이며 51개 열을 모두 올바르게 처리합니다.sum_lst2에 12개 열, sum_lst3에 39개 열, sum_lst4에 0개 열을 삽입합니다.
Names Default To Here( 1 );
//cdt = open("temp\Rawdata.csv");
cdt = Current Data Table();
sum_lst2 = {};
sum_lst3 = {};
sum_lst4 = {};
col_lst2 = cdt << get column names( Numeric);
For( i = 1, i <= N Items( col_lst2 ), i++,
colname = Column( col_lst2[i] ) << get name;
If(
Contains(
{"SS008", "SS009", "SS010", "SS015", "SS053", "FS9429", "FS9792", "FS9906", "FS9908", "FS1302", "FS1305",
"FS1308", "FS1360", "FS1373", "FS2744", "FS4621", "FS4625", "FS4630", "FS4640", "FS4681", "FS4830"},
colname
) | (colname >= "FS2900" & colname <= "FS2950") | (colname >= "FS3400" & colname <= "FS3450")
,
Insert Into( sum_lst2, col_lst2[i] )///CAT1//
, // Else
Contains( {"SS098", "SS090"}, colname ) | (colname >= "FS9700" & colname <= "FS9791") | (colname >= "FS9793" &
colname <= "FS9799")
,
Insert Into( sum_lst4, col_lst2[i] ) //CAT2//
, // Else
Insert Into( sum_lst3, col_lst2[i] )///CAT3
);
);
Eval( Eval Expr( cdt << New Column( "CAT1", formula( Sum( Expr( sum_lst2 ) ) ) ) ) );
Eval( Eval Expr( cdt << New Column( "CAT3", formula( Sum( Expr( sum_lst3 ) ) ) ) ) );
Eval( Eval Expr( cdt << New Column( "CAT2", formula( Sum( Expr( sum_lst4 ) ) ) ) ) );
Re: 중첩된 if 및 else 문에 대한 도움이 필요합니다.질문에 잘못된 코드를 실수로 복사했습니다. 아래는 if/else 구현을 위해 작성한 코드이지만 CAT3 열에는 0만 있습니다. else 문 배치에 문제가 있습니까?
다시 한번 말씀드리지만 저는 이것을 2개의 카테고리로 버킷팅하려고 합니다. CAT1/2에 속하지 않는 값은 모두 CAT3으로 버킷팅해야 합니다.
cdt = open("temp\Rawdata.csv");
cdt = Current Data Table();
sum_lst2 = {};
sum_lst3 = {};
sum_lst4 = {};
col_lst2 = cdt << get column names( Numeric );
For( i = 1, i <= N Items( col_lst2 ), i++,
colname = Column( col_lst2[i] ) << get name;
If(
Contains(
{"SS008", "SS009", "SS010", "SS015", "SS053", "FS9429", "FS9792", "FS9906", "FS9908", "FS1302", "FS1305", "FS1308", "FS1360", "FS1373",
"FS2744", "FS4621", "FS4625", "FS4630", "FS4640", "FS4681", "FS4830"},
colname
) | (colname >= "FS2900" & colname <= "FS2950") | (colname >= "FS3400" & colname <= "FS3450"),
Insert Into( sum_lst2, col_lst2[i] ), ///CAT1//
If( Contains( {"SS098", "SS090"}, colname ) | (colname >= "FS9700" & colname <= "FS9791") | (colname >= "FS9793" & colname <= "FS9799"),
Insert Into( sum_lst4, col_lst2[i] ), //CAT2//
),
Insert Into( sum_lst3, col_lst2[i] )///CAT3
)
);
Eval( Eval Expr( cdt << New Column( "CAT1", formula( Sum( Expr( sum_lst2 ) ) ) ) ) );
Eval( Eval Expr( cdt << New Column( "CAT3", formula( Sum( Expr( sum_lst3 ) ) ) ) ) );
Eval( Eval Expr( cdt << New Column( "CAT2", formula( Sum( Expr( sum_lst4 ) ) ) ) ) );Re: 중첩된 if 및 else 문에 대한 도움이 필요합니다.아래와 같은 것은 어떻습니까? If() 문 사이에 글루 연산자를 사용했기 때문에 실제로 스크립트에서 "else" 문을 본 적이 없습니다. 아래에서 모든 If() 문을 중첩한 다음 최종 else를 sum_lst4 목록에 삽입으로 사용했습니다(Cat4 열 이름을 원하는 위치라고 가정).
cdt = Current Data Table();
sum_lst2 = {};
sum_lst3 = {};
sum_lst4 = {};
col_lst2 = cdt << get column names( Numeric );
For( i = 1, i <= N Items( col_lst2 ), i++,
colname = Column( col_lst2[i] ) << get name;
If(
Contains(
{"SS008", "SS009", "SS010", "SS015", "SS053", "FS9429", "FS9792", "FS9906", "FS9908", "FS1302", "FS1305", "FS1308", "FS1360", "FS1373",
"FS2744", "FS4621", "FS4625", "FS4630", "FS4640", "FS4681", "FS4830"},
colname
) | (colname >= "FS2900" & colname <= "FS2950") | (colname >= "FS3400" & colname <= "FS3450"),
Insert Into( sum_lst2, col_lst2[i] ), ///Cat1//
If( Contains( {"SS098", "SS090"}, colname ) | (colname >= "FS9700" & colname <= "FS9791") | (colname >= "FS9793" & colname <= "FS9799"),
Insert Into( sum_lst4, col_lst2[i] ), //Cat2//
If( Contains( {"SS019", "SS027", "SS035", "FS9901"}, colname ) | (colname >= "FS3451" & colname <= "FS3499"),
Insert Into( sum_lst3, col_lst2[i] ),
Insert Into( sum_lst4, col_lst2[i] )///final nested else statement for Cat4
);//Cat3
)
);
);