데이터 업데이트 시작안녕하세요
테이블이 있고 빈 볼륨을 0으로 업데이트하고 싶습니다.

"19-04-2024" 열을 업데이트하는 스크립트를 작성했습니다.
문제는 열 이름을 변경할 수 있다는 것인데 저는 열 (3)이나 열 (4)를 사용하는 것을 선호합니다
하지만 작동하지 않습니다.
스크립트를 수정해 주실 수 있나요?
dt << 데이터 업데이트 시작;
dt << 열 코드 변경(
dt << 열 (3),
{맵 값( _rcOrig, {., 0}, 일치하지 않음( _rcNow ) )},
속성 업데이트( 1 ),
대상열(열 (3) ) );
dt << 데이터 업데이트 종료;
자동화 및 스크립팅윈도우Re: 데이터 업데이트 시작AsColumn이 여기서 작동하는 것 같습니다.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
dt[1::10, 4] = .;
dt << Recode Column(
AsColumn(dt, 4),
{Map Value(_rcOrig, {., 0}, Unmatched(_rcNow))},
Update Properties(1),
Target Column(AsColumn(dt, 4))
);
이것은 데이터 테이블 첨자를 사용할 가능성이 가장 높은 간단한 경우입니다 . 데이터 테이블 첨자
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
dt[1::10, 4] = .;
missing_rows = Loc(dt[0, 4], .);
dt[missing_rows, 4] = 0;
Re: 데이터 업데이트 시작뭔가 잘못됐어
간단한 스크립트를 사용하여 "19-04-2024" 열의 빈 볼륨을 0으로 변경하려고 했습니다.
dt[1::10, 3] = .;
missing_rows = Loc(dt[0, 3], .);
dt[missing_rows, 3] = 0;

하지만 스크립트가 빈 값을 0으로 변경하는 것이 아니라 14.3%와 21.3%도 0으로 변경하는 것을 볼 수 있습니다.

실제로 내 스크립트는 잘 작동하지만 dt :"19-04-2024"를 "column 3"으로 어떻게 변경할 수 있는지 모르겠습니다.
dt << 데이터 업데이트 시작;
dt << 열 코딩 변경(dt :"19-04-2024",
{맵 값( _rcOrig, {., 0}, 일치하지 않음( _rcNow ) )},
속성 업데이트( 1 ),
대상 열( :"19-04-2024" ) );
dt << 데이터 업데이트 종료;
Re: 데이터 업데이트 시작이 부분
dt[1::10, 4] = .;
데모 목적으로 몇 가지 누락된 값(열 4의 처음 10개 행)을 추가하여 제거할 수 있었습니다.
Re: 데이터 업데이트 시작응, 명령줄
dt[1::10, 3] = .;
세 번째 열의 1~10행에 있는 모든 값을 비워 둡니다. 스크립트의 나머지 부분은 빈 값을 0으로 대체했습니다. 따라서 @jthi가 설명했듯이 해당 줄을 제거하면 됩니다.
Re: 데이터 업데이트 시작이러한 문제를 해결하는 방법에는 2~3가지 트릭이 있습니다.
- 이름 Expr(열로(...))
- Eval(대체(Expr(),... , ...)))
- 세 번째 항목이 있는 경우 여기에서 찾을 수 있습니다. JMP의 표현식 처리: Tipps and Trapdoors
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
my col = Name Expr( As Column( dt, 2 ) );
Eval(
Substitute(
Expr(
dt << Recode Column(
_col_,
{Map Value( _rcOrig, {14, 0}, Unmatched( _rcNow ) )},
Update Properties( 1 ),
Target Column( _col_ )
)
),
Expr( _col_ ), Name Expr( my col )
)
);
Re: 데이터 업데이트 시작안녕하세요
귀하의 제안을 잘 이해했다면 "19-04-2024"를 귀하의 스크립트 로 변경하는 것입니다.
하지만 오류가 발생했습니다. 내가 어디에서 틀렸는지 확인해 주실 수 있나요?
dt << 데이터 업데이트 시작;
dt << 열 코딩 변경(dt
( my col = Name Expr( As Column( Column( dt, 3 ) ) );
Eval( 대체( Expr( dt << 열 코드 변경( _col_,
{지도 값( _rcOrig, {14, 0}, 일치하지 않음( _rcNow ) )},
속성 업데이트( 1 ),
대상 열( _col_ ))),
Expr( _col_ ), 이름 Expr( my col ))) ),
{맵 값( _rcOrig, {., 0}, 일치하지 않음( _rcNow ) )},
속성 업데이트( 1 ),
대상 열( :"19-04-2024" ) );
dt << 데이터 업데이트 종료;
Re: 데이터 업데이트 시작아이디어는 다음과 같습니다.
유연한 방식으로 사용할 수 있는 모듈을 얻으세요. 핸들은 내 col입니다.
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
my col = Name Expr( As Column( XXX) );
Eval(
Substitute(
Expr(
dt << Recode Column(
_col_,
{Map Value( _rcOrig, {14, 0}, Unmatched( _rcNow ) )},
Update Properties( 1 ),
Target Column( _col_ )
)
),
Expr( _col_ ), Name Expr( my col )
)
);여기서 As Column(XXX)은 다음으로 대체될 수 있습니다.
- 열로(열("성별"))
- 열(dt, "sex")
- 열("성별")로
- 열로(3)
- 열로(dt, 3)
- 귀하의 경우:
열로(dt, "19-04-2024")
또는 열로("19-04-2024")
편집하다:
Jarmo가 이전 게시물에 표시한 것처럼: https://community.jmp.com/t5/Discussions/Begin-Data-Update/mp/752334/highlight/true#M93383 , 실제로 Recode Column 의 경우
- Eval(Substitute(...))도 필요하지 않습니다.
- 이름 Expr(As Column(xxx))도 아닙니다.
... Recode Column(AsColumn(xxx)...) 이면 충분합니다.
우와!
Re: 데이터 업데이트 시작이 부분만 있으면 될 것 같아요
dt << Recode Column(
AsColumn(dt, 4),
{Map Value(_rcOrig, {., 0}, Unmatched(_rcNow))},
Update Properties(1),
Target Column(AsColumn(dt, 4))
);
AsColumn 내부에서 열 인덱스를 정의합니다.
이런 테이블이 있다면

열 인덱스 1과 3의 누락된 값을 바꾸고 싶습니다.
dt << Recode Column(
As Column(dt, 1),
{Map Value(_rcOrig, {., 0}, Unmatched(_rcNow))},
Update Properties(1),
Target Column(As Column(dt, 1))
);
그리고
dt << Recode Column(
As Column(dt, 3),
{Map Value(_rcOrig, {., 0}, Unmatched(_rcNow))},
Update Properties(1),
Target Column(As Column(dt, 3))
);
(As Column 내부의 숫자가 변경되었습니다)

Re: 데이터 업데이트 시작
dt = Open("$SAMPLE_DATA/Big Class.jmp"); <BR />dt << Recode Column(
/*Print(.);*/AsColumn(dt, Print(1);2),
Print(2);{Print(3);Map Value(_rcOrig, {12, Print(4);0}, Unmatched(_rcNow))},
/*Print(0);*/Update Properties(Print(5);1),
/*Print(0);*/Target Column(/*Print(.);*/AsColumn(dt, Print(6);4))
);준다
2
5
6
1
1
3
3
3
3
3
3
1
:height
- Print(0) : 여기에는 명령이 필요하지 않습니다 → 오류 메시지 → /* 주석에 넣었습니다 */
- 인쇄 2 : 두 번째 인수가 평가됩니다. 목록은 그대로 유지됩니다(목록은 평가되지 않음).
- Print(5) & Print (6) → 명명된 인수의 인수가 평가됩니다.
- Print(1) : 이제 첫 번째 인수가 평가됩니다. 왜 두 번입니까?
- Print(3) : 6회(!)(교체할 값과 무관)
- 인쇄(1) : 다시 ?
- [Print(.) : 평가 되지만 Jmp가 열 정보를 올바르게 가져오는 것을 방해합니다 → /* 주석에 넣었습니다 */]
- Print(4) : 표시되지 않음 → 여기서는 예상되지 않음 → 오류 → 값이 "."로 대체됩니다. (0 대신)
- :height : 반환값: 대상 컬럼
Re: 데이터 업데이트 시작(가) 에
dt = Open("$SAMPLE_DATA/Big Class.jmp");
dt[1,"age"]=4;
row()=1;
AsColumn(dt, tmp=As Column(2);print(tmp);tmp /*=4*/); // column #4 , row #1= 59<BR />Sum(As Column(2) ,7) // 4 + 7 = 11<BR />Column(2) 의 결과는 열 #2가 아니므로 열 #2(행 #1)의 값 입니다.
(B) 반면 Recode Column( ) 의 첫 번째 인수는 As Column()이 열 참조를 반환하는 수준까지만 평가됩니다.
... 첫 번째 예와 같이 현재 행의 값이 아닙니다.
Target Column() 인수의 인수와 동일합니다.
@joseph_morgan은 JSL을 사용하여 "두 번 평가되는" 표현식에 대해 효율적이고 강력한 애플리케이션 개발 에 관해 이야기합니다.
= (아)
이 "표준"을 방지하면 (B) 마술처럼 느껴집니다.:)
Re: 데이터 업데이트 시작그렇다면 JSL 편집기의 고급 구문 강조와 관련하여 함수가 인수를 평가합니까? , 세 번째 색상이 필요한가요?
Re: 데이터 업데이트 시작안녕하세요
dt :"19-04-2024"를 dt [1::10, 4]로 변경하려고 했지만 빈 볼륨이 0으로 변경되지 않습니다.
제가 틀린 부분이 어디인지 확인해 주실 수 있나요?
dt << 데이터 업데이트 시작;
dt << 열 재코딩 ( dt [1::10, 4] ,
{맵 값( _rcOrig, {., 0}, 일치하지 않음( _rcNow ) )},
속성 업데이트( 1 ),
대상 열( dt[1::10, 4] ));
dt << 데이터 업데이트 종료;