我在SAS数据集中有一个长度为8的数字变量。尽管它的长度是8个字节,但它只包含一个数字。见下面的例子。
my_variable
1
2
5
9
0
3
问题是我需要这个变量长度只有1个字节,SAS不接受它。我正在运行以下代码:
data my_data_2;
set my_data;
length my_variable 1;
run;
SAS报告此错误消息:
ERROR 352-185: The length of numeric variables is 3-8.
1 - 那么,为什么我不能有一个长度小于3(或大于8)字节的数字变量?
2 - 有办法管理吗?我真的需要这个变量长度为1。
修改 - 添加更多内容:
我需要将此特定变量设为长度1,因为我需要将此数据集提交给我国的监管机构。他们要求这个变量是数字和长度为1,否则他们的验证程序将无法读取它。此外,它需要以.DBF文件的形式提交(只需使用SAS proc export
语句即可完成。)
我尝试使用Microsoft Access 2013将长度更改为1并且它可以正常工作。问题是Access 2013不会读取或保存.DBF,因为它是旧的文件格式。所以,我想改变SAS的长度,只需将其导出.DBF。
答案 0 :(得分:1)
Windows和UNIX上运行的SAS变量的最小长度 系统为3个字节,最大长度为8个字节。在IBM上 大型机,SAS变量的最小长度是2个字节,而 最大长度为8个字节。
SAS数字变量长度以字节计,而不是数字。
如果你需要一个标志,请使用字符变量。
答案 1 :(得分:0)
SAS中数字变量的长度是它可以存储的字节数。由于SAS仅使用浮点数,它们不能小于3 bytes in Windows or Unix (2 in z/OS);基础SAS中没有整数或二进制/位数据类型。
欢迎您使用格式来控制屏幕上显示的字段宽度。
答案 2 :(得分:0)
我认为PROC EXPORT会写长度为1的数字变量。你只需要附加一个格式就可以让proc知道你想要的那样。
试试这个测试程序。
%let fname=%sysfunc(pathname(work))/test.dbf ;
data test;
length male 8 sex $1 female 8;
set sashelp.class(obs=3 keep=sex );
male=(sex='M');
female=(sex='F');
format male female F1.;
run;
proc export data=test outfile="&fname" replace
dbms=dbf
;
run;
然后将DBF文件的内容作为二进制文件转储到日志
data _null_;
infile "&fname" recfm=f lrecl=32;
input;
list;
run;
并将其与文件格式https://en.wikipedia.org/wiki/.dbf#File_architecture_overview
的描述进行比较