누락된 데이터를 처리하는 방법<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />안녕하세요,
엄청난 수의 열에 대한 설명 분석을 실행해야 합니다. 그렇게 하기 위해 다음 스크립트를 만들었습니다.
dt = 현재 데이터 테이블();
column_names = dt << 열 이름 가져오기(숫자, 문자열);
for(i=3,i<=NItems(column_names),i++,
colName = column_names ;
cmd = Expr(
ow = dt << 분포(
연속 분포( 열( cName ) ),
여기서( :SEX == "에프" )
);
owr = ow<<보고;
);
Into(cmd,Expr(cName),colName)로 대체;
평가(cmd);
);
현재 저널() << HTML 저장(".....\test.htm");
이제 실행하면 로그 창에 "하나 이상의 열에 누락된 값만 있습니다."라는 오류 메시지가 표시됩니다.
모든 값 또는 특정 "SEX"에 대한 값만 데이터가 누락된 열이 있습니다. 내 루프에서 확인하고 분석에서 건너뛸 수 있는 방법은 무엇입니까?
감사해요
Re: 누락된 데이터를 처리하는 방법친애하는 MS,
이 마지막 스크립트는 완벽하게 작동했습니다. 나는 이 토론에서 많은 것을 배웠다.
모든 안내에 다시 한 번 감사드립니다.
Re: 누락된 데이터를 처리하는 방법스택은 단일 열에 데이터를 정렬하기 위한 중간 단계일 뿐입니다. 오류는 레이블 또는 데이터 열이 여기에서 요약 명령이 가정하는 "위치" 및 "데이터"라는 이름을 얻지 못하는 것일 수 있습니다. "보이지 않음" 옵션을 제거하고 누적 테이블을 살펴보고 열 이름을 확인하고, 의도한 대로 이름이 지정되지 않은 경우 그에 따라 요약을 변경합니다(누적 데이터 열("데이터") 인수 위의 jsl 주석에 표시된 대로 열이 원래 테이블에서와 같이 그룹화되면 JMP 10에서 무시되므로 위의 예에서 그룹 해제 명령이 사용됩니다.
스택 대신 잘못 작동하는 경우 요약과 조옮김을 동시에 사용하여 유사한 결과를 얻을 수 있습니다. 아래 예를 시도하십시오(게시된 테이블 "예제"에서 작동).
dt = 데이터 테이블 ( "예" ) ;
column_names = dt << 열 이름 가져오기 ( 숫자 ) ;
( dt << 요약 (
그룹 ( : 섹스 ) ,
평균 ( 평가 ( column_names ) ) ,
통계 열 이름 형식 ( "열" )
)) << 바꾸어 놓다 ( 상표 ( : 섹스 ) , 출력 테이블 ( "결과" ) ) ;
Re: 누락된 데이터를 처리하는 방법친애하는 MS,
이 새로운 방법을 제안해 주셔서 감사합니다. 더 빠르고 효율적이라고 생각합니다. 그러나 스크립트를 실행하면 다음과 같은 오류가 발생합니다.
'잘못된 인수'의 액세스 또는 평가에서 열을 찾을 수 없습니다.
Send는 'Send' , dt_stacked << Summary( Group( :Position ), Mean( :Data ), Subgroup( :SEX ) )의 액세스 또는 평가에서 스크립터블 개체를 예상합니다.
다음 스크립트에서 /*###*/로 표시된 오류
::dt = 데이터 테이블( "예제" );
::column_names = ::dt << 열 이름 가져오기( 숫자 );
::dt_stacked = ::dt << 스택(
열(:column_names),
소스 레이블 열( "위치" ),
누적 데이터 열( "데이터" ),
보이지 않는
);
::dt_sum = ::dt_stacked << /*###*/요약(
그룹( :위치 ),
평균( :데이터 ),
하위 그룹( :SEX )
) /*###*/;
열( 3 ) << 이름 설정( "여성" );
열( 4 ) << 이름 설정( "남성" );
dt_sum << 새 열( "비율", 수식( 여성 / 남성 ) );
dt_stacked << 창 닫기;
스택 생성에 문제가 있는 것 같습니다. 왜 그런 오류가 발생했는지 아십니까?
모든 도움에 다시 한 번 감사드립니다.
Re: 누락된 데이터를 처리하는 방법위에 게시된 예제 테이블에 스크립트를 적용하면 해당 메시지가 표시되지 않습니다. 그러나 owr[NumberColBox(4)]; 존재하지 않기 때문에 오류가 발생합니다. 지금까지의 코드는 "F"에 대한 결과만 제공하고 "M"에 대한 결과도 제공하지 않습니다. 결과 테이블에 나열하려는 것으로 가정합니다.
유일한 목표가 요약하는 것이라면 많은 배포 보고서를 반복하는 대신 Summary() 함수를 사용한다는 의미입니다.
예:
dt = 데이터 테이블 ( "예" ) ;
column_names = dt << 열 이름 가져오기 ( 숫자 ) ;
dt << 열 그룹 해제 ( column_names ) ; // 누적 데이터 열 이름과 그룹화된 열이 있는 JMP 10의 버그로 나타납니다.
dt_stacked = dt << 스택 (
열 ( column_names ) ,
소스 레이블 열 ( "위치" ) ,
누적 데이터 열 ( "데이터" ) ,
보이지 않는
) ;
dt_sum = dt_stacked << 요약 (
그룹 ( : 위치 ) ,
평균 ( : 데이터 ) ,
하급 집단 ( : 섹스 )
) ;
열 ( 삼 ) << 이름 설정 ( "여성" ) ;
열 ( 4 ) << 이름 설정 ( "남성" ) ;
dt_sum << 새 열 ( "비율" , 공식 ( 여성 / 남성 ) ) ;
dt_stacked << 창 닫기 ;
Re: 누락된 데이터를 처리하는 방법다음과 같이 스크립트를 변경했습니다.
dt = 데이터 테이블("예제") ;
column_names = dt << 열 이름 가져오기(숫자, 문자열);
results = 새 테이블("결과", 표시,
새 열("위치", 문자),
새 열("여성", 숫자),
새 열("남성", 숫자),
New Column("비율", 수식(여성/남성)),
행 추가(NItems(column_names))
);
for(i=1,i<=NItems(column_names),i++,
If( N Row( dt << get rows where( And( :SEX[] == "F", !Is Missing( Column( column_names )[] ) ) ) ),
colName = column_names ;
cmd = Expr(
ow = dt << 분포( 연속 분포( 열( cName ) ) ),
여기서( :SEX == "에프" ) );
owr = ow<<보고;
allmean= owr[NumberColBox(2)];
Fmean = 전체평균[1];
allmean1= owr[NumberColBox(4)];
Mmean = 전체평균1[1];
열(결과,1) = 열이름;
열(결과,2) = 평균;
열(결과,3) = 평균;
ow << 창 닫기;
);
Into( cmd, Expr( cName ), colName )로 대체;
평가( cmd );
)
);
결과 << 저널;
이제 로그 창에 이 메시지가 표시됩니다.
"열을 찾을 수 없습니다{1}
'Column' , Column( column_names 액세스 또는 평가 )"
다음 줄을 참조합니다.
":SEX[] == "F" & !Is Missing( Column/*###*/(::column_names[::i])[] )"
조언 감사합니다
Re: 누락된 데이터를 처리하는 방법오류가 잘못 배치되어 발생했다고 생각합니다.
dt = 현재 데이터 테이블()
원래 테이블이 아닌 새 테이블 "Results"를 dt에 할당합니다. 결과에는 :SEX라는 열이 없습니다.
대신 dt = data table("Example")을 사용해 보십시오.
Re: 누락된 데이터를 처리하는 방법친애하는 MS,
안내해 주셔서 감사합니다. 제안된 코드를 추가하고 다음과 같이 결과를 테이블로 내보내도록 스크립트를 수정했습니다.
results = 새 테이블("결과", 표시,
새 열("위치", 문자),
새 열("여성", 숫자),
새 열("남성", 숫자),
New Column("비율", 수식(여성/남성)),
행 추가(NItems(column_names))
);
dt = 현재 데이터 테이블();
column_names = dt << 열 이름 가져오기(숫자, 문자열);
for(i=1,i<=NItems(column_names),i++,
If( N Row( dt << get rows where( And( :SEX[] == "F", !Is Missing( Column( column_names )[] ) ) ) ),
colName = column_names ;
cmd = Expr(
ow = dt << 분포( 연속 분포( 열( cName ) ) ),
여기서( :SEX == "에프" ) );
owr = ow<<보고;
allmean= owr[NumberColBox(2)];
Fmean = 전체평균[1];
allmean1= owr[NumberColBox(4)];
Mmean = 전체평균1[1];
열(결과,1) = 열이름;
열(결과,2) = 평균;
열(결과,3) = 평균;
ow << 창 닫기;
);
Into( cmd, Expr( cName ), colName )로 대체;
평가( cmd );
)
);
결과 << 저널;
이제 실행하면 SEX에 대한 오류가 발생합니다. 테스트용 데이터 파일의 예를 첨부했습니다.
도움을 주셔서 미리 감사드립니다.
Re: 누락된 데이터를 처리하는 방법이를 수행하는 방법에는 여러 가지가 있습니다(일반적으로). 다음은 작동해야 하는 한 가지 접근 방식입니다.
dt = 현재 데이터 테이블 () ;
column_names = dt << 열 이름 가져오기 ( 숫자 , 끈 ) ;
을 위한 ( 나 = 삼 , 나 <= N개 항목 ( column_names ) , 나 ++,
// SEX="F" > 0인 열 i에서 누락되지 않은 경우 작업을 수행하고, 그렇지 않으면 다음 i
만약에 ( N행 ( dt << 행 가져오기 ( 그리고 ( : 섹스 [] == "에프" , ! 누락 ( 열 ( column_names [ 나 ] )[] ) ) ) ) ,
colName = column_names [ 나 ] ;
명령 = 만료 (
아야 = dt << 분포 ( 지속적인 배포 ( 열 ( 이름 ) ) , 어디 ( : 섹스 == "에프" ) ) ;
올빼미 = 아야 << 보고서 ;
) ;
로 대체 ( 명령 , 만료 ( 이름 ) , colName ) ;
평가 ( 명령 ) ;
)
) ;
현재 저널 () << HTML 저장 ( ".....\test.htm" ) ;