私は混乱しています。それのように書かれたルックスとしてあなたのコードは私に動作します:
37 DATA Quote2;
38 CalendarYearMonth=201603;
39 YearMonth = INPUT(STRIP(PUT(CalendarYearMonth,6.))||'01',YYMMDD10.);
40 RetentionYearMonth = YearMonth - 90;
41 put (CalendarYearMonth YearMonth RetentionYearMonth)(=);
42 put RetentionYearMonth 8.;
43 format YearMonth RetentionYearMonth mmddyy10.;
44 RUN;
CalendarYearMonth=201603 YearMonth=03/01/2016 RetentionYearMonth=12/02/2015
20424
YEARMONTHは3月1日のためにSAS日付で、2016年RetentionYearMonthは(90日YEARMONTH前)2015年12月2日のためのSAS日付です。 2015年12月2日のSASの日付は20424です。
また、RetentionYearMonthは12月のSASの日付になると思われます。、2015?そうであれば、単純に90日を引くことはできません。しかし、あなたは例えば、おそらくINTNX機能を使用することができます。:
以上
53 DATA Quote2;
54 CalendarYearMonth=201603;
55 YearMonth = INPUT(STRIP(PUT(CalendarYearMonth,6.))||'01',YYMMDD10.);
56 RetentionYearMonth = intnx('month',YearMonth,-3);
57 put (CalendarYearMonth YearMonth RetentionYearMonth)(=);
58 put RetentionYearMonth 8.;
59 format YearMonth RetentionYearMonth mmddyy10.;
60 RUN;
CalendarYearMonth=201603 YearMonth=03/01/2016 RetentionYearMonth=12/01/2015
20423
NOTE: The data set WORK.QUOTE2 has 1 observations and 3 variables.
を、INTNXはYEARMONTH前に3ヶ月で月の開始のためにSASの日付を返します。
テーブルを結合するときは、(SASの日付をテキスト文字列に明示的に変換しない限り)保存された値が結合に使用されます。
私はOPのコードを読んで、201603の値を持つCalendarYearMonthの数値変数を持っていました。SASの日付を取得するために、文字に変換して '01'を追加してからinput()を使ってSASに変換しました9060を引く前の日付です。これは201603から90を引くものではありません.90日ではなくINTNXで3ヶ月を引くことについて同意すると、それが問題の原因だと思います。 – Quentin