我的公司使用會計日曆,每週從周六開始。 根據 JSL WEEKOFYEAR() 函數,我們有兩個選項:規則 1 和 2 表示從星期日開始的周,以及規則 3 表示從星期一開始的周。
是否有人創建了 JMP 腳本來計算以星期日或星期一以外的日期開始的周的一年中的第幾週?
抱歉延遲回复。 您的解決方案效果很好。 謝謝。
只是為了確保解決方案是明確的,
@tx尼爾森寫道:
很好,這是一個簡單的解決方案
Names Default To Here( 1 );
testdate = Date MDY( 12, 31, 2017 );
Week Of Year( testdate + If( Year( testdate ) == Year( testdate + In Days( 1 ) ), In Days( 1 ), 0 ) );
通過使用 In Days(1) 函數向 testdate 添加 1 天,星期日 = 2,星期一 = 3,... 星期五 = 7,星期六又回到 1,因為一周中沒有第 8 天。
我還喜歡您可以在公式中定義變量。 很有幫助!
很好,這是一個簡單的解決方案
Names Default To Here( 1 );
testdate = Date MDY( 12, 31, 2017 );
Week Of Year( testdate + If( Year( testdate ) == Year( testdate + In Days( 1 ) ), In Days( 1 ), 0 ) );
我剛剛注意到計算似乎在年底崩潰了。
在今年的示例中,2017 年 9 月 30 日是第 41 週的開始。從星期六開始的所有其他週都正確遞增到 12/30/17,即第 54 週的開始。
由於某種原因,JMP 沒有在接下來的 6 天內繼續第 54 週,或者跳過第 54 週並開始第 1 週,而是將 12/30 星期六標記為 2018 年第 54 週,將 12/31 星期日標記為 2018 年第一周的第一天。看起來像是一個缺陷,因為數據集上的幾週不應該在不同的兩天開始?
我需要添加一個 if 循環將所有第 54 週的數據更改為第 1 週。
如果你在計算中添加一天,你就會得到你想要的
Names Default To Here( 1 );
Week Of Year( Today() + In Days( 1 ) );
除了「一周的第一天」的不同日期外,一年中的一周的一般計算方式也有點令人驚訝。
特別是在比較“一年中的一周”和“一年中的一周”(來自新公式上下文選單)時。
2023 年,規則 #3 比規則 #1 延遲了 1 週以上:


New Table( "Week",
Add Rows( 30 ),
New Column( "date",
Format( "m/d/y", 12 ),
Formula( Date MDY( 1, 1, 2023 ) + (Row() - 11) * (24 * 3600) )
),
New Column( "\!"Year Week\!"",
Character,
"Nominal",
Formula(
Local(
{w = Week Of Year( :date, 3 ), y = Year( :date ), m = Month( :date )
},
If( Is Missing( :date ),
"",
Char( If( m / w >= 12, y + 1, w / m >= 52, y - 1, y ) ) ||
If( w >= 10, "W", "W0" ) || Char( w )
)
)
)
),
New Column( "Week of Year, rule1",
Formula( Week Of Year( :date ) )
),
New Column( "Week of Year, rule3",
Format( "Best", 12 ),
Formula( Week Of Year( :date, 3 ) ),
Color Cells( {32, {19, 20, 21, 22, 23, 24, 25}} )
),
New Column( "day",
Formula( Day Of Week( :date ) ),
Value Labels( {1 = "Sun", 2 = "Mon"} ),
Use Value Labels( 1 )
)
)