[[1] * 4] * 3
или даже:
[[1, 1, 1, 1]] * 3
Создает список, который ссылается на внутренний [1,1,1,1]
3 раза - не три копии внутреннего списка, поэтому в любое время, когда вы изменяете список (в любом позиция), вы увидите изменение три раза.
Это то же самое, что и в этом примере:
>>> inner = [1,1,1,1]
>>> outer = [inner]*3
>>> outer
[[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]]
>>> inner[0] = 5
>>> outer
[[5, 1, 1, 1], [5, 1, 1, 1], [5, 1, 1, 1]]
, где это, вероятно, немного менее удивительно.
Как вы можете определить, какие даты должны быть 2012, а какие - 1912?
Если ваша переменная действительно является переменной даты SAS, то век уже был 2000, вы просто не могли увидеть ее раньше, потому что ваш использовали формат отображения, который не показывает век. Вы можете использовать intnx()
для регулировки значения.
want = intnx('year',have,-100,'same');
Если вы конвертируете строки в даты, вы можете использовать опцию YEARCUTOFF
, чтобы интерпретировать 12
как 1912
вместо 2012
.
857 %let optsave=%sysfunc(getoption(yearcutoff));
858 %put &=optsave;
OPTSAVE=1926
859 %put %sysfunc(inputn(24/12/12,ddmmyy8),date9);
24DEC2012
860 options yearcutoff=1912;
861 %put %sysfunc(inputn(24/12/12,ddmmyy8),date9);
24DEC1912
862 options yearcutoff=&optsave;