Re: 듀레아마도 다음과 같을 것입니다:
For(k=1, k<=6, k++,
StartValue = Column(k+2)[1];
For(i=1, i<=6, i++,
If(num(Column(i+8)[1])>StartValue,break())
);
If(i<7, Write(Column("Date début "||(Column(i+8)<<GET name=""></GET>Re: 기간당신의 답변에 감사드립니다 @폴딘 그러나 이것은 테스트 데이터베이스이므로 이 스크립트는 700개 이상의 열에 대해 작동해야 합니다.
Re: 듀레약간 게으른 솔루션이지만 작동할 수 있습니다.
Names Default To Here(1);
dt = Open("$DOWNLOADS/AAAA.jmp");
// would get only numeric columns, but the provided example table is broken...
all_cols = dt << Get Column Names(/*Numeric, */"String");
// so first we have to fix the datatable
Remove From(all_cols, 1, 2);
For Each({col_name}, all_cols,
Column(dt, col_name) << Set Data Type("Numeric");
Column(dt, col_name) << Set Modeling Type("Continuous");
);
// create list of duration columns
// same amount of columns AND in same order for "number" and duration
date_cols = {};
some_cols = {};
For Each({col_name}, all_cols,
If(Starts With(lowercase(col_name), "date d"),
Insert Into(date_cols, col_name);
, !IsMissing(Regex(col_name, "^\d+$")),
Insert Into(some_cols, col_name);
,
show(col_name);
);
);
If(N Items(date_cols) != N Items(some_cols),
Throw("Column mismatch");
);
// create new columns
dur_cols = {};
For Each({some_col}, some_cols,
new_col = dt << New Column("duration " || some_col, Numeric, Continuous);
Insert Into(dur_cols, new_col << get name);
);
// calculation
For Each Row(
For Each({date_col, idx}, date_cols,
datesomething = dt[Row(), some_cols[idx]];
datesomethingvals = dt[Row(), some_cols];
// to make comparison easier
datesomethingvals[idx] = .;
datesomethingvals[Loc(datesomethingvals < datesomething)] = .; // lazy handling
idx_of_interest = Loc Min(Abs(datesomethingvals - datesomething));
If(idx_of_interest == 0,
continue();
);
val_of_interest = dt[Row(), date_cols[idx_of_interest]];
dt[Row(), dur_cols[idx]] = Abs(val_of_interest - dt[Row(), date_col]); // not sure if Abs is correct here
);
);
// durations for 900 and 4500 for some reason missing from demo dataRe: 기간당신의 답변에 감사드립니다 @jthi !
지속
여러분, 안녕하세요,
아래와 같은 데이터베이스가 있습니다.

만화에서 녹색 세포는 우리가 얻고자 하는 결과입니다.
기간을 계산하는 스크립트를 만들고 싶습니다.
"시작 날짜" 열이 있고 실행 순서를 나타내는 "숫자" 열이 있습니다.
목표는 숫자를 기반으로 "시작일 y - 시작일 x"를 계산하는 것입니다.
연재 만화의 예를 들어 설명합니다.
첫 번째 줄 : "720" 열의 셀에 숫자 12가 있는 것을 확인하고 모든 "숫자" 열 중에서 12보다 큰 첫 번째 열(여기서는 값이 21인 열 "740")을 찾습니다.
따라서 기간 720은 기간 720 = 시작일 740 - 시작일 720이 됩니다.
그런 다음 기간 740의 경우 기간 740 = 시작일 9801 - 동일한 원칙으로 시작일 740이 됩니다.
내가 쓰기 시작한 스크립트는 다음과 같습니다.
dt = Current Data Table();
dur_cols = Filter Each( {col_name}, dt << Get Column Names( "String", Continuous ),
Starts With( col_name, "Date début" )
);
num_colnr = Transform Each( {col_name}, dur_cols, Word( -1, col_name ) );
char_cols = dt << Get Column Names ("string", Character);
wait(1);
N_taches = N Items(dur_cols);
for (i = 1, i <= N_taches, i++,
Eval(
Eval Expr(
col = dt << New Column ( "durée" || num_colnr[i], Numeric, "Continuous", Format(":jou:hh:m",8));
col << Formula(
colidx = Loc(dt[row(), char_cols] > Eval(num_colnr[i]))[1];
If ( N Items(colidx) > 0,
val = dur_cols[colidx] - Eval(dur_cols[i]);
If(IsMissing(val),
0
,
val
);
,
0
);
);
)));당신의 도움을 주셔서 감사합니다 !
소비자 및 시장 조사품질 및 프로세스 엔지니어링Re: 듀레그래서? For 루프 카운트 숫자를 올리십시오. 또는 N cols()를 상한으로 포함하여 동적으로 만드십시오.
이 문제를 이미 해결했다면 이 항목을 해결된 것으로 표시하시겠습니까?