Изменить формат даты SAS

[[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]]

, где это, вероятно, немного менее удивительно.

0
задан Udhav Sarvaiya 24 March 2019 в 08:50
поделиться

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;
0
ответ дан Tom 24 March 2019 в 08:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: