콜론이 빠진 기간을 수정하는 방법:안녕하세요 여러분,
전에 겪어보지 못한 문제가 발생했습니다...
저는 시간(hh:mm) 형식으로 입력된 87개의 열로 구성된 기간 정보가 있는 엑셀 파일을 가지고 있습니다.
하지만 그것들은 hhmm 또는 hmm입니다. <-- 콜론(:)이 빠져있네요 .
- 소요 시간이 10분 미만이면 세 자리 숫자로 입력합니다 (예: 9분 59초는 959로 입력).
- 소요 시간이 9분 59초를 초과하면 네 자리 숫자로 입력합니다(예: 11분 52초는 1152로 입력).
열이 1~2개라면 괜찮겠지만, 87개나 되니 감당하기 어렵네요.
첨부 파일을 참조하십시오.
도움 주시면 정말 감사하겠습니다!
건배, 크리스티안
자동화 및 스크립팅데이터 혼합 및 정리제목: 콜론이 빠진 기간을 수정하는 방법 :다양한 옵션이 있습니다 (제 생각에는 이 모든 것이 작동할 것 같습니다).
1. 모두 문자열로 변환하세요
2. 시작 숫자에 0을 더합니다.
3. 마지막 4자리를 가져오세요
4. 세 번째 문자로 ":"를 삽입합니다.
5. 기간 형식을 유지하며 숫자로 변환합니다.
Names Default To Here(1);
dt = Current Data Table();
cols = dt << Get Column Names("String");
For Each({colname}, cols,
Column(dt, colname) << Set Data Type("Character");
Eval(EvalExpr(
dt << Apply Formula(
Columns(Expr(NameExpr(AsColumn(dt, colname)))),
Formula(
s = Right("0" || Expr(NameExpr(AsColumn(dt, colname))), 4);
Left(s, 2) ||":"||Right(s,2)
),
Output("In Place")
) << Run Formulas;
));
);
For Each({colname}, cols,
Column(dt, colname) << Set Data Type(Numeric, Format("hr:m", 30), Input Format("hr:m")) << Set Modeling Type("Continuous");
);
또는
Names Default To Here(1);
dt = Current Data Table();
cols = dt << Get Column Names("String");
dt << Begin Data Update;
For Each({colname}, cols,
For Each Row(dt,
s = Char(Column(dt, colname)[]);
If(Column(dt, colname)[] < 1000,
s = "0" || s
);
Column(dt, colname)[] = In Format(Left(s, 2) || ":" || Right(s, 2), "hr:m");
);
Column(dt, colname) << Format("hr:m", 30);
);
dt << End Data Update;
또는 숫자를 그대로 사용하여 JMP 시간 형식으로 "변환"할 수도 있습니다.
Names Default To Here(1);
dt = Current Data Table();
cols = dt << Get Column Names("String");
dt << Begin Data Update;
For Each({colname}, cols,
For Each Row(dt,
val = Column(dt, colname)[];
h = Floor(val / 100);
m = Mod(val, 100);
t = h * In Hours(1) + m * In Minutes(1);
Column(dt, colname)[] = t;
);
Column(dt, colname) << Format("hr:m", 30);
);
dt << End Data Update;
제목: 콜론이 빠진 기간을 수정하는 방법 :그리고 마지막 방법은 JMP에서 대화형으로 아주 쉽게 수행할 수 있습니다.
1. 모든 열을 선택합니다
2. 열 머리글을 마우스 오른쪽 버튼으로 클릭합니다.
3. 수식 빠른 열 만들기
4. 상대적 스타일을 사용하여 수식을 바꿉니다.
h = Floor(_relative_from_Col 1 / 100);
m = Mod(_relative_from_Col 1, 100);
t = h * In Hours(1) + m * In Minutes(1);
5. 출력 형식을 '제자리 데이터'로 변경합니다.

6. "x 바꾸기"를 클릭합니다.
7. 현재 최적 서식 지정으로 초 단위만 표시되므로, 속성 표준화를 사용하여 형식을 시간:분으로 변경하십시오.

8. 확인 또는 적용을 클릭한 후

그리고 JMP는 친절하게도 스크립트를 작성해 줍니다.
// Transform column
Data Table("example for JMP com") << Apply Formula(
Columns(Group(:Col 1, 2), Ref("_relative_from_Col 1")),
Formula(
h = Floor(_relative_from_Col 1 / 100);
m = Mod(_relative_from_Col 1, 100);
t = h * In Hours(1) + m * In Minutes(1);
),
Output("In Place")
) << Run Formulas;
// Standardize column attributes
Local({old dt = Current Data Table()},
Current Data Table(Data Table("example for JMP com"));
For Each({col, index}, {:Col 1, :Col 2}, col << Format("hr:m", 10));
Current Data Table(old dt);
);
제목: 콜론이 빠진 기간을 수정하는 방법제가 하는 방법은 다음과 같습니다.
Names Default To Here( 1 );
dt = Current Data Table();
colNames = dt << get column names( contiuous, string );
For Each( {col}, colNames,
Show( col );
For Each Row(
As Column( col ) = Informat(
Substr( Char( As Column( Col ) ), 1, Length( Char( As Column( Col ) ) ) - 2 ) || ":" ||
Substr( Char( As Column( Col ) ), Length( Char( As Column( Col ) ) ) - 1, 2 ),
"hr:m"
)
);
column(dt,col) << format( "hr:m" );
);
제목: 콜론이 빠진 기간을 수정하는 방법 :안녕하세요, 야르모님, 정말 감사합니다!
당신의 첫 번째 대본이 놀라운 효과를 발휘하네요!
그런데 가끔씩 시간이 hh:mm:ss 형식으로 입력되는 경우가 있다는 걸 방금 깨달았어요.
이 문제도 해결할 방법이 있을까요? 예시 v2를 참조하세요.
건배, C
추신: 다음에 만나면 커피나 맥주 한 잔 사드릴게요!
제목: 콜론이 빠진 기간을 수정하는 방법 :실제 데이터(서로 다른 형식의 문자열 열)에서 가져온 데이터인가요? 원래 예제는 숫자 데이터였던 걸로 기억합니다. 초는 예제처럼 항상 00인가요?
제목: 콜론이 빠진 기간을 수정하는 방법네, 안타깝게도 이는 실제 데이터입니다.
저는 recode를 사용하면 될 거라고 생각해서 이 문제가 없는 두 개의 열을 선택했습니다.
하지만 제 생각이 틀렸거나, 적어도 84개 열에 대해 재코딩을 사용하는 것은 제가 감당하기에는 너무 과하다는 것을 깨달았습니다.
네, 초는 항상 00입니다.
제목: 콜론이 빠진 기간을 수정하는 방법 :문자열 열에 대한 빠른 수식 계산 방법입니다. 이 수식은 이미 시간 형식으로 지정된 값에는 시간 부분에 0이 채워져 있다고 가정합니다(예: 0 9:00:00).
numonly = Substitute(_relative_from_X__1, ":", ""); // remove ":"
hrm = Left(numonly, 4); // take 4 characters from left
val = Num(hrm); // convert to numeric for calculations
h = Floor(val / 100); // take only hundreds
m = Mod(val, 100); // remainder
t = h * 60*60 + m * 60; // convert to seconds

시작점과 쉽게 비교할 수 있도록 여기에 새 열을 만듭니다. 수식을 만든 후에는 표준화 속성(데이터 유형, 모델링 유형, 형식)을 사용하여 필요한 유형 변경을 수행합니다.

더 보기...
This will create new data columns, you might want to use in place data instead
// Transform column
Data Table("example for JMP com v2") << Apply Formula(
Columns(Group(:X__1, 12), Ref("_relative_from_X__1")),
Formula(
numonly = Substitute(_relative_from_X__1, ":", "");
hrm = Left(numonly, 4);
val = Num(hrm);
h = Floor(val / 100);
m = Mod(val, 100);
t = h * 60 * 60 + m * 60;
),
Output(New Static)
) << Run Formulas;
// Standardize column attributes
Local({old dt = Current Data Table()},
Current Data Table(Data Table("example for JMP com v2"));
For Each({col, index},
{:X__1 2, :X__2 2, :X__3 2, :X__4 2, :X__5 2, :X__6 2, :X__7 2, :X__8 2,
:X__9 2, :X__10 2, :X__11 2, :X__12 2},
col << Set Data Type(Numeric, Format("Best", 12))
);
Current Data Table(old dt);
);
// Standardize column attributes
Local({old dt = Current Data Table()},
Current Data Table(Data Table("example for JMP com v2"));
For Each({col, index},
{:X__1 2, :X__2 2, :X__3 2, :X__4 2, :X__5 2, :X__6 2, :X__7 2, :X__8 2,
:X__9 2, :X__10 2, :X__11 2, :X__12 2},
col << Set Modeling Type("Continuous")
);
Current Data Table(old dt);
);
// Standardize column attributes
Local({old dt = Current Data Table()},
Current Data Table(Data Table("example for JMP com v2"));
For Each({col, index},
{:X__1 2, :X__2 2, :X__3 2, :X__4 2, :X__5 2, :X__6 2, :X__7 2, :X__8 2,
:X__9 2, :X__10 2, :X__11 2, :X__12 2},
col << Format("hr:m", 12)
);
Current Data Table(old dt);
);