如何将CSV中以0开头的代码作为字符串导入SAS?
解决SAS导入CSV保留前导0的问题
问题核心
PROC IMPORT 默认仅读取前20行数据猜测变量类型,如果前20行里目标变量都是纯数字(哪怕后续行有带前导0的),就会被识别为数值型,导致前导0丢失。你用的 DBDSOPTS 参数对CSV引擎无效——这个参数主要用于ODBC等数据库连接场景,不适用于本地CSV文件导入。
不用Infile/自定义数据步的可行方案
1. 扩大猜测行数(最简便)
通过 GUESSINGROWS 参数让SAS读取更多行(甚至全部行)来判断变量类型,确保覆盖到带前导0的行:
proc import out=out.data datafile="&path./datafile.csv" dbms=csv replace; getnames=yes; delimiter=";"; guessingrows=max; /* 读取全部行判断类型,数据量大时可设具体数值如10000 */ run;
2. 复用PROC IMPORT生成的代码修改后运行
PROC IMPORT 会在SAS日志里自动生成对应的导入数据步代码,操作步骤:
- 先运行一次原
PROC IMPORT代码 - 打开日志,找到
NOTE: 导入成功。生成的DATA步代码如下:后的完整代码 - 复制这段代码,把目标变量(比如
var1)的输入格式改成字符型,例如将input var1 5.;修改为input var1 $5.; - 运行修改后的代码,其他变量保持原样,仅调整目标变量类型
3. 临时指定变量格式(适合已知变量名的场景)
如果明确知道目标变量名,可以直接在导入时指定字符格式:
proc import out=out.data datafile="&path./datafile.csv" dbms=csv replace; getnames=yes; delimiter=";"; format var1 $5.; /* 按实际长度调整$后的数字 */ run;
内容的提问来源于stack exchange,提问作者Lma
相关产品推荐
相关产品推荐

