Sas 如何将时间(char)变量转换为数字变量?

Sas 如何将时间(char)变量转换为数字变量?,sas,type-conversion,Sas,Type Conversion,我有一个在SAS中表示为字符的时间变量。示例:0:04 0:12 0:01 0:11等。我想将其转换为数字变量0.04 0.12 0.01等。 使用此代码: data work.set2; set work.set; TIME2 = input(TIME, best4.); ; run; 创建一个只缺少值的新列。您能就我的代码中需要改进的地方提出建议吗?如果您的时间类型为字符串: WITHDOTS=translate(TIME2,'.',':'); 资料来源: SAS将日期和时间存储为数字,

我有一个在SAS中表示为字符的时间变量。示例:0:04 0:12 0:01 0:11等。我想将其转换为数字变量0.04 0.12 0.01等。 使用此代码:

data work.set2; set work.set;
TIME2 = input(TIME, best4.);
;
run;

创建一个只缺少值的新列。您能就我的代码中需要改进的地方提出建议吗?

如果您的时间类型为字符串:

WITHDOTS=translate(TIME2,'.',':');
资料来源:
SAS将日期和时间存储为数字,时间是秒数。我认为把它转换成SAS时间是你最好的选择。0.1秒和10秒之间有显著差异,因为一个是6秒,一个是10秒。例如,如果你有0.1和0.2,取差0.1->现在是10或6秒的差。你真的需要仔细考虑你想要如何解释它,使用你的方法会有问题。 时间上的差异将无法正确反映

也就是0:04 4秒或4分钟。标准含义为4分钟,即240秒

以下是如何转换它:

data have;

x = '0:04';output;
x = '0:12';output;
x = '0:11'; output;
x = '1:00'; output;
x = '4:25'; output;

run;

data want;
set have;

sas_time = input(x, time.);
sas_time2 = sas_time;
format sas_time2 time4.;


/*if it's seconds*/
seconds = input(scan(x, 1, ':'), 8.)*60 + input(scan(x, 2, ':'), 8.);

run;

proc print data=want;run;

那是什么意思<代码>'0:10'在我看来像是10秒。如果您将其转换为数字
0.1
这意味着什么?如果这个数字是以分钟为单位的,那么0.1意味着6秒而不是10秒。@tom我想把它转换成一个数字变量,因为我想运行一个回归,并了解增量更改将产生什么影响。因此,将其转换为0.1秒或10秒不会影响我希望的解释。我只是运行了代码,它只是用相同格式的变量复制了时间列。0:04->0:04数据工作.set2;set work.set;时间2=翻译(时间“:”,“.”);跑TRANSLATE是一个字符串函数,它不会给出所需的结果。参数是反向的。语法是
translate(string,tochars,fromchars)
@Reeza谢谢你的信息。我不清楚变量的类型。我会把它放在这里,留给那些可能有时间的人。更新的答案也让这一点变得清晰。秒=。。。。。。声明成功了!代码的第一部分与上面解释的完全相同,0:04转换为240秒。非常感谢你!您还可以在字符串前面加上“00:”前缀,然后时间信息将它们解释为秒而不是分钟<代码>秒=输入('00:'| | x,时间。)