Does anyone have a syntax that automatically calculates the calendar week?
Dr. Frank Gaeth
|
What does that mean? There is a function
that returns the week number: XDATE.WEEK. But the value for any given date
can differ between years.
Rick Oliver Senior Information Developer IBM Business Analytics (SPSS) E-mail: [hidden email] From: drfg2008 <[hidden email]> To: [hidden email] Date: 05/11/2012 04:15 PM Subject: calendar week Sent by: "SPSSX(r) Discussion" <[hidden email]> Does anyone have a syntax that automatically calculates the calendar week? ----- Dr. Frank Gaeth FU-Berlin -- View this message in context: http://spssx-discussion.1045642.n5.nabble.com/calendar-week-tp5705454.html Sent from the SPSSX Discussion mailing list archive at Nabble.com. ===================== To manage your subscription to SPSSX-L, send a message to [hidden email] (not to SPSSX-L), with no body text except the command. To leave the list, send the command SIGNOFF SPSSX-L For a list of commands to manage subscriptions, send the command INFO REFCARD |
ups, I had overlooked it. Thank you.
Dr. Frank Gaeth
|
In reply to this post by drfg2008
Thanks to MZ for the information that a 'calender week' in the US is not equivalent to other countries (D).
Dr. Frank Gaeth
|
Calendar weeks in SPSS Statistics assume
that the first day of the year is the beginning of the first calendar week.
Therefore, the week that contains any particular day of the year can be
in a different calendar week in different years, and the week value range
is 1-53.
Rick Oliver Senior Information Developer IBM Business Analytics (SPSS) E-mail: [hidden email] Phone: 312.893.4922 | T/L: 206-4922 From: drfg2008 <[hidden email]> To: [hidden email] Date: 05/16/2012 01:12 PM Subject: Re: calendar week Sent by: "SPSSX(r) Discussion" <[hidden email]> Thanks to MZ for the information that a 'calender week' in the US is not equivalent to other countries (D). ----- Dr. Frank Gaeth FU-Berlin -- View this message in context: http://spssx-discussion.1045642.n5.nabble.com/calendar-week-tp5705454p5711037.html Sent from the SPSSX Discussion mailing list archive at Nabble.com. ===================== To manage your subscription to SPSSX-L, send a message to [hidden email] (not to SPSSX-L), with no body text except the command. To leave the list, send the command SIGNOFF SPSSX-L For a list of commands to manage subscriptions, send the command INFO REFCARD |
The definition of the first week does vary
around the world, and hence, the week number can vary. Common schemes
are
-starts on day 1 of year -starts on the date of the first wkday occurring in the year. First day of week definition varies around the world -first week with at least 4 days in it starting with the start-of-week date. There are probably others. Jon Peck (no "h") aka Kim Senior Software Engineer, IBM [hidden email] new phone: 720-342-5621 From: Rick Oliver/Chicago/IBM@IBMUS To: [hidden email] Date: 05/16/2012 12:29 PM Subject: Re: [SPSSX-L] calendar week Sent by: "SPSSX(r) Discussion" <[hidden email]> Calendar weeks in SPSS Statistics assume that the first day of the year is the beginning of the first calendar week. Therefore, the week that contains any particular day of the year can be in a different calendar week in different years, and the week value range is 1-53. Rick Oliver Senior Information Developer IBM Business Analytics (SPSS) E-mail: [hidden email] Phone: 312.893.4922 | T/L: 206-4922 From: drfg2008 <[hidden email]> To: [hidden email] Date: 05/16/2012 01:12 PM Subject: Re: calendar week Sent by: "SPSSX(r) Discussion" <[hidden email]> Thanks to MZ for the information that a 'calender week' in the US is not equivalent to other countries (D). ----- Dr. Frank Gaeth FU-Berlin -- View this message in context: http://spssx-discussion.1045642.n5.nabble.com/calendar-week-tp5705454p5711037.html Sent from the SPSSX Discussion mailing list archive at Nabble.com. ===================== To manage your subscription to SPSSX-L, send a message to [hidden email] (not to SPSSX-L), with no body text except the command. To leave the list, send the command SIGNOFF SPSSX-L For a list of commands to manage subscriptions, send the command INFO REFCARD |
I would hope there would also be provision for ISO 8601's definition
Robert |
The ISO week number can be calculated like
this using Python programmability and the SPSSINC TRANS extension command.
This short program defines the computation. begin program. import datetime def iso(year, mon, day): return datetime.date(year, mon, day).isocalendar() end program The SPSSINC TRANS extension command uses that program and iterates over the active dataset doing the calculation for each case. spssinc trans result=isoyear isoweek, isoday /formula "iso(year, month, day)". ISO week numbers are a bit weird in that they can fall back to reference the previous year, so you get the year, week number, and day back. In this example, year, month, and day are SPSS variables, and three variables are created: isoyear, isoweek, and isoday representing year, week number, and day of week number. Regards, Jon Peck (no "h") aka Kim Senior Software Engineer, IBM [hidden email] new phone: 720-342-5621 From: Robert Jones <[hidden email]> To: [hidden email] Date: 05/17/2012 08:12 AM Subject: Re: [SPSSX-L] calendar week Sent by: "SPSSX(r) Discussion" <[hidden email]> I would hope there would also be provision for ISO 8601's definition Robert -- View this message in context: http://spssx-discussion.1045642.n5.nabble.com/calendar-week-tp5705454p5711299.html Sent from the SPSSX Discussion mailing list archive at Nabble.com. ===================== To manage your subscription to SPSSX-L, send a message to [hidden email] (not to SPSSX-L), with no body text except the command. To leave the list, send the command SIGNOFF SPSSX-L For a list of commands to manage subscriptions, send the command INFO REFCARD |
Thanks
|
Dear Jon, or any other wise person Can you help me to make this or another script (ISO-week number) work with a variable on the form DATETIME17 (hh-mmm-yyyy hh:mm) or DATE11 (dd-mmm-yyyy)? I am sure it would be a valuable script for many European users. I have tried to understand SPSSINC TRANS, but haven't quite got the hang of it. Can I write the Python script directly in Syntax? Does it work like a macro? Best regards Lars N. |
google "nabble spssx"
type "isoweek" in the edit box key <enter> click <calendar week> Art Kendall Social Research ConsultantsOn 4/16/2014 3:02 AM, nessie [via SPSSX Discussion] wrote:
Art Kendall
Social Research Consultants |
In reply to this post by nessie
Jon's original solution can be amended to work with this by extracting the relevant portions from the DateTime variable in SPSS and then submitting those to the python program. Here I amend Jon's original slightly to coerce the variables to integers within the python function.
*************************. DATA LIST FREE / Id. BEGIN DATA 0 1 2 END DATA. COMPUTE MyDate = $TIME - (Id*60*60*24). FORMATS MyDate (DATETIME17). *Simple way with current program, just create your own seperate time variables. COMPUTE year = XDATE.YEAR(MyDate). COMPUTE month = XDATE.MONTH(MyDate). COMPUTE day = XDATE.MDAY(MyDate). FORMATS year (F4.0) month day (F2.0). EXECUTE. begin program. import datetime def iso(year, mon, day): return datetime.date(int(year), int(mon), int(day)).isocalendar() end program. spssinc trans result=isoyear isoweek isoday TYPE = 0 0 0 /formula "iso(year, month, day)". *************************. I thought that to avoid making the new variables you could change the python formula to simply take one date-time variable, but this ends up being alittle more complicated. It appears SPSSINC does not automatically turn SPSS datetime variables into python datetime objects (just passes the seconds from the epoch). If you don't want to bother making the new variables, it will take alittle more work to coerce the variable to a python datetime object (see https://docs.python.org/2/library/datetime.html#datetime.datetime.fromtimestamp - it looks like those dates start from 1/1/1970) *************************. *Updating Python program to take a datetime variables. BEGIN PROGRAM. import datetime def isoDate(MyDate): return datetime.MyDate.isocalendar() END PROGRAM. *This does not work. SPSSINC TRANS RESULT=isoyear2 isoweek2 isoday2 TYPE = 0 0 0 /FORMULA "isoDate(MyDate)". *What will SPSS return?. BEGIN PROGRAM. def testDate(MyDate): return MyDate END PROGRAM. SPSSINC TRANS RESULT=Test TYPE = 0 /FORMULA "testDate(MyDate)". *SPSS does not assume the variable is datetime. BEGIN PROGRAM. import spss import datetime MyVars = [1] dataCursor=spss.Cursor(MyVars,cvtDates=MyVars) #dataCursor=spss.Cursor(MyVars) MyData=dataCursor.fetchone() dataCursor.close() print MyData[0].isocalendar() END PROGRAM. *see https://docs.python.org/2/library/datetime.html#datetime.datetime.fromtimestamp. *To convert the timestamp. *************************. |
SPSSINC TRANS does not convert SPSS dates
into Python, because you can do this in the plugin program if you need
it. Here is an example (and notice that there is no need for the
cursed EXECUTE.)
DATA LIST FREE / Id. BEGIN DATA 0 1 2 END DATA. COMPUTE MyDate = $TIME - (Id*60*60*24). FORMATS MyDate (DATETIME17). begin program. import datetime from spssdata import CvtSpssDatetime def iso(spssdate): return CvtSpssDatetime(spssdate).isocalendar() end program. spssinc trans result=isoyear isoweek isoday TYPE = 0 /formula "iso(MyDate)". Jon Peck (no "h") aka Kim Senior Software Engineer, IBM [hidden email] phone: 720-342-5621 From: Andy W <[hidden email]> To: [hidden email], Date: 04/16/2014 07:02 AM Subject: Re: [SPSSX-L] calendar week Sent by: "SPSSX(r) Discussion" <[hidden email]> Jon's original solution can be amended to work with this by extracting the relevant portions from the DateTime variable in SPSS and then submitting those to the python program. Here I amend Jon's original slightly to coerce the variables to integers within the python function. *************************. DATA LIST FREE / Id. BEGIN DATA 0 1 2 END DATA. COMPUTE MyDate = $TIME - (Id*60*60*24). FORMATS MyDate (DATETIME17). *Simple way with current program, just create your own seperate time variables. COMPUTE year = XDATE.YEAR(MyDate). COMPUTE month = XDATE.MONTH(MyDate). COMPUTE day = XDATE.MDAY(MyDate). FORMATS year (F4.0) month day (F2.0). EXECUTE. begin program. import datetime def iso(year, mon, day): return datetime.date(int(year), int(mon), int(day)).isocalendar() end program. spssinc trans result=isoyear isoweek isoday TYPE = 0 0 0 /formula "iso(year, month, day)". *************************. I thought that to avoid making the new variables you could change the python formula to simply take one date-time variable, but this ends up being alittle more complicated. It appears SPSSINC does not automatically turn SPSS datetime variables into python datetime objects (just passes the seconds from the epoch). If you don't want to bother making the new variables, it will take alittle more work to coerce the variable to a python datetime object (see https://docs.python.org/2/library/datetime.html#datetime.datetime.fromtimestamp - it looks like those dates start from 1/1/1970) *************************. *Updating Python program to take a datetime variables. BEGIN PROGRAM. import datetime def isoDate(MyDate): return datetime.MyDate.isocalendar() END PROGRAM. *This does not work. SPSSINC TRANS RESULT=isoyear2 isoweek2 isoday2 TYPE = 0 0 0 /FORMULA "isoDate(MyDate)". *What will SPSS return?. BEGIN PROGRAM. def testDate(MyDate): return MyDate END PROGRAM. SPSSINC TRANS RESULT=Test TYPE = 0 /FORMULA "testDate(MyDate)". *SPSS does not assume the variable is datetime. BEGIN PROGRAM. import spss import datetime MyVars = [1] dataCursor=spss.Cursor(MyVars,cvtDates=MyVars) #dataCursor=spss.Cursor(MyVars) MyData=dataCursor.fetchone() dataCursor.close() print MyData[0].isocalendar() END PROGRAM. *see https://docs.python.org/2/library/datetime.html#datetime.datetime.fromtimestamp. *To convert the timestamp. *************************. ----- Andy W [hidden email] http://andrewpwheeler.wordpress.com/ -- View this message in context: http://spssx-discussion.1045642.n5.nabble.com/calendar-week-tp5705454p5725480.html Sent from the SPSSX Discussion mailing list archive at Nabble.com. ===================== To manage your subscription to SPSSX-L, send a message to [hidden email] (not to SPSSX-L), with no body text except the command. To leave the list, send the command SIGNOFF SPSSX-L For a list of commands to manage subscriptions, send the command INFO REFCARD |
Free forum by Nabble | Edit this page |