53 個時間列,有些為空,有些已填滿。如何編寫公式,確保最高填充列 > 下一個填充列等。如果我有數百行,每一行都是一個單獨的工作票,每行最多可以填寫 53 個時間列,但大多數只填充其中一些列,中間的列是空白的。
對於第 1 行來說:我有第 1 列、第 23 列和第 36 列是唯一包含時間戳記的列,我需要知道 36>23 和 23>1。
對於第 2 行,所有列都有時間戳,因此我需要知道 [53>52,............,2>1]。
謝謝
菲奧娜
進階統計建模消費者與市場研究回复:53 時間列,有些是空的,有些是填充的。 我如何編寫一個公式來確保最高填充列 > 比下一個填充列等。亞爾莫,
這也很好用。
我沒有對矩陣做太多,但看起來很有趣。 我將不得不通過它並確保我理解它。
謝謝
回复: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);
));
回复:53 時間列,有些是空的,有些是填充的。 我如何編寫一個公式來確保最高填充列 > 比下一個填充列等。這太棒了,甚至比我要求的還要好,因為它準確地告訴我條件不真實的地方。
謝謝!
回复: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]
)
)
);
);回复:53 時間列,有些是空的,有些是填充的。 我如何編寫一個公式來確保最高填充列 > 比下一個填充列等。只是為了澄清;它們應該都是正確的,所以我認為最簡單的方法是有一個標記列,在上面不是這種情況的任何行的末尾顯示“1”。