53개의 시간 열, 일부는 비어 있고 일부는 채워져 있습니다. 가장 높은 채워진 열이 다음 채워진 열보다 크도록 하는 공식을 어떻게 작성합니까?행이 수백 개이고 각 행이 별도의 작업 티켓인 경우, 각 행에는 최대 53개의 시간 열이 채워질 수 있지만 대부분은 이러한 열 중 일부만 채워지고 그 사이의 열은 비어 있습니다.
따라서 행 #1에 대해 말하자면, 열 1, 열 23, 열 36은 타임스탬프를 포함하는 유일한 열이므로, 36>23, 23>1임을 알아야 합니다.
행 #2의 경우 모든 열에 타임스탬프가 있으므로 [53>52,............,2>1]임을 알아야 합니다.
감사합니다
피오나
고급 통계 모델링소비자 및 시장 조사Re: 53 시간 열, 일부는 비어 있고 일부는 채워져 있습니다. 가장 많이 채워진 열이 다음으로 채워진 열보다 >인지 확인하는 수식을 어떻게 작성합니까?자모,
이것도 아주 잘 작동합니다.
나는 매트릭스로 많은 일을 하지는 않았지만 재미있어 보인다. 나는 그것을 통해 내가 그것을 이해했는지 확인해야 할 것입니다.
감사해요
Re: 53 시간 열, 일부는 비어 있고 일부는 채워져 있습니다. 가장 많이 채워진 열이 다음으로 채워진 열보다 >인지 확인하는 수식을 어떻게 작성합니까?다음은 매트릭스를 사용하는 한 가지 가능한 솔루션입니다.열 이름에 대한 정보가 필요하지 않은 경우 result_column 및 이와 관련된 계산을 제거하여 더 짧게 만들 수 있습니다.
Names Default To Here(1);
dt = Current Data Table();
result_flag = [];
result_column = {};
For Each Row(dt,
m_all = dt[Row(), 0]; //get all values of row to matrix
m_values = m_all[Loc(m_all)]; //remove missing values;
start = Insert(m_values[1::N Items(m_values)-1], 0, 1); //shift right by 0 and remove last value
end = m_values;
//if we only want to know if any value is smaller than previous, we can just us any
Insert Into(result_flag, Any(end - start < 0)); //we could stop here if we don't want to know the column name
//but that doesn't tell us which column(s) breaks the "rule"
idx = Loc(end - start < 0); //indices of value matrix which break the rule -> will require checking for empty
If(N Items(idx) == 0,
Insert Into(result_column, "");
, //else
breaking_col = Min(Loc(m_all, m_values[Min(idx)])); //values which break rule, we can most likely just get the first index?
Insert Into(result_column, Column(dt, breaking_col) << get name);
);
);
dt << New Column("Flag", Numeric, Nominal, Values(result_flag));
dt << New Column("Column_Flag", Character, Nominal, Values(result_column));수식으로도 사용될 가능성이 높지만 깨지기 쉽기 때문에 권장하지는 않습니다.
dt << New Column("Formula_Flag", Numeric, Nominal, Formula(
dt = Current Data Table();
m_all = Matrix(dt[Row(), 0]);
m_values = m_all[Loc(m_all)];
start = Insert(m_values[Index(1, N Items(m_values) - 1)], 0, 1);
end = m_values;
Any(end - start < 0);
));
Re: 53 시간 열, 일부는 비어 있고 일부는 채워져 있습니다. 가장 많이 채워진 열이 다음으로 채워진 열보다 >인지 확인하는 수식을 어떻게 작성합니까?조건이 사실이 아닌 곳을 정확히 알려주기 때문에 제가 요청한 것보다 훨씬 낫습니다.
감사해요!
Re: 53 시간 열, 일부는 비어 있고 일부는 채워져 있습니다. 가장 많이 채워진 열이 다음으로 채워진 열보다 >인지 확인하는 수식을 어떻게 작성합니까?이것이 원하는 것인지 정확히 확신할 수 없지만 아래 스크립트는 열 전체를 스캔하여 모든 날짜 값이 이전 날짜보다 증가하는지 확인합니다.그렇지 않은 경우 이전 날짜보다 이전 날짜를 감지한 열의 이름을 배치합니다.
Names Default To Here( 1 );
dt = Current Data Table();
If( Try( dt:flag << get name, "" ) == "",
dt << New Column( "Flag", Character )
);
For( rowNum = 1, rowNum <= N Rows( dt ), rowNum++,
For( startCol = 1, startCol <= N Cols( dt ), startCol++,
If( Is Missing( Column( startCol )[rowNum] ) == 0,
holdVal = Column( startCol )[rowNum];
Break();
)
);
For( col = startCol + 1, col <= N Cols( dt ) - 1, col++,
If( Is Missing( Column( Col )[rowNum] ) == 0,
If( Column( Col )[rowNum] < holdVal,
dt:Flag[rowNum] = (Column( Col )) << get name;
holdVal = Column( col )[rowNum];
Break();
,
holdVal = Column( Col )[rowNum]
)
)
);
);Re: 53 시간 열, 일부는 비어 있고 일부는 채워져 있습니다. 가장 많이 채워진 열이 다음으로 채워진 열보다 >인지 확인하는 수식을 어떻게 작성합니까?다시 한번 확인하기 위해; 그들은 모두 정확해야하므로 가장 쉬운 방법은 위의 경우가 아닌 행 끝에 "1"을 표시하는 플래그 지정 열을 갖는 것입니다.