格式化所有日期变量相同

时间:2016-09-27 21:01:21

标签: sas

如何选择包含日期的所有变量并对其应用特定格式?我不提前知道他们的名字或号码。

像这样的伪代码,虽然特殊变量引用 DATES 不存在为 NUMERIC CHARACTER ALL

DATA test;
    date1 = '31DEC2015';
    name = "names";
    first_n = "charge";
    anotherdate = 1000;
    result = 34.2;
    again_dates = 1001;
Run;

DATA test2;
    set test1;
    FORMAT _DATES_ date9;
Run;

如果无法做到这一点,那么让我们说日期变量都已经在ddmmyy10中格式化了,并且我想选择具有这种格式的所有变量并将它们转换为date9。

2 个答案:

答案 0 :(得分:2)

我不确定你提出的更普遍的问题是否有解决方案(至少我不知道如何抓住任何可能隐藏为数字变量的日期变量,除非有一些正在遵循的命名约定或许)。但是,如果您只想重新格式化具有几种已知格式之一的未指定数量的日期变量到date9。那就更直接了:

DATA test;
format anotherdate  again_dates  date1 ddmmyy10.;
    date1 = '31DEC2015';
    name = "names";
    first_n = "charge";
    anotherdate = 1000;
    result = 34.2;
    again_dates = 1001;
Run;


proc contents data = test out = testcntnts;
run;

proc sql;
select NAME into: datevars separated by ' ' from testcntnts where FORMAT = "DDMMYY";
quit;


data test2;
format &datevars date9.;
set test;
run;

答案 1 :(得分:0)

你可以做第二个问题,但不是第一个问题。 SAS将日期存储为数字,因此无法区分日期中的任何整数。

您可以使用sashelp.vcolumn或使用proc内容使用ddmmyy格式过滤日期,然后我将使用proc数据集来应用这些更改。使用proc数据集的好处是你不会重新处理数据集。

我建议的解决方案与Christopher Anderson非常接近,但不同的数据源和实现,但代码基本相同。