sas infile 数据行截断为 8 个字符

sas infile dataline trunctuates at 8 characters

我已经有几年没有使用 SAS 了,我正在努力重新投入其中...

我正在尝试使用逗号分隔的数据行读取数据。虽然有很多示例,但我无法完全理解以下内容以正确导入我的数据:

data h0;
   infile datalines delimiter=','; 
   input
   kst
   kst_bez $
   hx $
   hx_bez $
   hxx $
   hxx_bez $
   hxxx $
   hxxx_bez $
;
   datalines;
10000,Team 1 South,H0,Group,H10,Retail,H112,Retail Germany
10001,Team 2 North & West,H0,H10,Retail Division 2,H112,Retail Germany
10003,Human Res,H0,Group,H20,HR,H112,HR Germany
;

我原以为 delimiter=',' 告诉 SAS 只需将我的 ,-字符之间的数据读入 VARCHAR-变量之类的东西...但是,任何字母数字数据被截断为 8 个字符。

我依稀记得我必须使用类似 $varying40. 的东西,这与我找到的示例一致 - 但是,如果我将它添加到我的变量中,变量不会停在 ,,而是读取整个,比如 40 个字符。

有什么提示吗?

非常感谢!

如果您不定义它们,否则 SAS 会将所有字符变量默认为长度 8。如果您使用 LENGTH 或 [=13 显式定义变量,您和 SAS 编译器可能会更清楚=] 使用它们之前声明。否则 SAS 必须根据它们的首次使用方式来猜测您希望它们如何定义。

data h0;
  length kst 8 kst_bez  hx  hx_bez  hxx  hxx_bez  
         hxxx  hxxx_bez 
  ;
  infile datalines dsd truncover ;
  input kst -- hxxx_bez ;
datalines;
...

您可以在第一次使用变量时向 INPUT 语句添加内联信息格式规范,SAS 将默认使用所用信息格式的宽度,但请确保添加冒号前缀以防止 SAS 读取过去分隔符。

data h0;
  infile datalines dsd truncover ;
  input kst kst_bez :. hx :. hx_bez :. hxx :. hxx_bez :. 
        hxxx :. hxxx_bez :.
  ;
datalines;
...