test.txt
(4 KB)
谢谢楼上朋友的回复。我随机模拟了4行样本数据,跟原数据的数据文件/变量值/缺省值情况是一模一样的。数据是没有变量头的,所以会单独有一个索引文件交待各变量的起始位置,含义,变量类型等,这个暂且不表。
先说说我们通常的做法:利用SAS,infile input 函数, 如以下 ( 比如:数据位置从46-60 是变量NO的值,该值是数字型变量;
而61-64属于变量NUMBER,该变量为文本型变量 , 这些都是根据索引文件来的)。
data qq;
infile 'QM\test.txt' missover lrecl=1500;
input
NO 46 - 60
NUMBER $ 61 - 64
TYPE $ 65 - 67
DATE $ 68 - 77
SCODE $ 78 - 81
CODE $ 82 - 84
RPTYPE $ 85 - 87
RP $ 88 - 90
RPT $ 91 - 92
ZIP $ 93 - 97
MM_E $ 98 - 99
MM_C $ 100 - 109
MM_C $ 110 - 117
CA $ 118 - 185
TU_S $ 354 - 356
TU_ST $ 357 - 359
TU_A $ 360 - 369
TU_F $ 370 - 469
QM_M $ 470 - 471
QM_F $ 472 - 580
QUOT $ 581 - 590
QUOTS $ 591 - 592
QUOT_P $ 593 - 602
QUOT_ZP $ 603 - 612
CREAD $ 613 - 628
DATE_F $ 629 - 638
STAT $ 639 - 667
REM $ 668 - 683
CAM $ 684 - 729
LO $ 730 - 739
AG $ 740 - 742
MED $ 743 - 762
LIST_N $ 763 - 773
LIST_R $ 774 - 784
CP_ID $ 785 - 793
LETTER $ 794 - 801
ORDER $ 802 - 809
C_IND $ 810 - 810
SUBTIME $ 811 - 826
REP_TXT $ 827 - 875
INAMT $ 876 - 881
FT_NR $ 882 - 882
ES_NR $ 883 - 883
HT_NR $ 884 - 884
OR_CDE $ 885 - 920
DER $ 921 - 927
AG 928 - 929
SE $ 930 - 943
VER $ 944 - 951
E_IND $ 952 - 952
I_IND $ 953 - 953
Y_IND $ 954 - 954
C_IND $ 955 - 955
RE_IND $ 956 - 956
ST_IND $ 957 - 957
ER_IND $ 958 - 958
RA_IND $ 959 - 959
RESNM $ 960 - 973
PRE $ 974 - 980
REF_ID $ 981 - 988
SU_ID $ 989 - 995
PRE_NT $ 996 - 1007
PRE_CY $ 1008 - 1010
ESC $ 1011 - 1060
MPD_NR $ 1061 - 1062
OS_DT $ 1063 - 1072
;
run;
所以我的问题是,如果要在R中复制这块SAS code的功能如何实现?
这个样本属于比较小的数据,只有数十个变量,通常需要处理的文件多达4000-5000个变量,这时SAS infile, input 的优势就变得特别明显,不管是全部输入5000个变量,还是只输入其中的10个变量,只要通过变换: 变量名 $(or blank) 变量起始值位置 - 变量终值位置 就可以了。
例如,下面的code输入的数据集只有该文件中的
PRE_NT,
PRE_CY,
ESC,
MPD_NR,
OS_DT,这5个变量。
data qq2;
infile 'QM\test.txt' missover lrecl=1500;
input
PRE_NT $ 996 - 1007
PRE_CY $ 1008 - 1010
ESC $ 1011 - 1060
MPD_NR $ 1061 - 1062
OS_DT $ 1063 - 1072
;
run;
不知道我的问题表述清楚了没有。还请各位赐教!
谢谢!