首页 > 解决方案 > 将数据集中的值加载到数组

问题描述

我有一个 150 行 1 列的数据集,看起来像;

surv_probs
0.15
0.12
0.10
0.9

当我使用函数扫描将值加载到数据步中的数组中时,我收到一条错误消息。surv_probs 字段是文本/字符。问题是 sas 尝试将概率转换为数值,然后扫描功能不起作用。日志说:“扫描功能有很多参数”。有人可以帮我为我解决这个问题。

proc sql;
select surv_probs
into: probs_lst separated by ','
from mydataset;
quit;


data test;
j=1;
array probs_arr{150};
do while(scan(&probs_lst,j,',') ne '');
probs_arr{j} = scan(&probs_lst,j,',');
j = j+1;
end;
run;

标签: sas

解决方案


在 SAS 代码中,字符串文字需要在它们周围加上引号。

do while(scan("&probs_lst",j,',') ne '');
probs_arr{j} = scan("&probs_lst",j,',');

但不要那样做。将数据保留为数字,并避免将它们转换为文本并再次返回时发生的精度损失。

proc transpose data=mydataset out=test(drop=_name_) prefix=probs_arr ;
  var surv_probs;
run;

推荐阅读