楼主: gxa1
1778 4

SAS数据读入问题, [推广有奖]

  • 2关注
  • 0粉丝

已卖:142份资源

副教授

47%

还不是VIP/贵宾

-

威望
0
论坛币
411 个
通用积分
8.3100
学术水平
3 点
热心指数
5 点
信用等级
3 点
经验
38065 点
帖子
358
精华
0
在线时间
1315 小时
注册时间
2009-3-27
最后登录
2024-8-13

楼主
gxa1 发表于 2010-10-2 20:08:43 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
要把如图下面各变量值读入,各变量值从原txt第三行开始读入。但是,问题是,现在我要再读入一个变量(Scode)的值,其值为原txt文件第一行的前六个字符,该怎么做?(不能直接赋值:Scode=600000,因为我有上百个这样的文件要处理)

下面是我原来的代码(只读了第三行后的数据)
Data work.test(label="日股票综合数据");
Infile 'M:\sh600000.txt'  delimiter = '09'x Missover Dsd lrecl=32767  firstobs=3 ;
Format Date YYMMDD10.;
Format Oprice 12.2;
Format Hprice 12.2;
Format Lprice 12.2;
Format Cprice 12.2;
Format Vol 12.2;
Format VOLmoney 12.2;
Informat Date YYMMDD10.;
Informat Oprice 12.2;
Informat Hprice 12.2;
Informat Lprice 12.2;
Informat Cprice 12.2;
Informat Vol 12.2;
Informat Volmoney 12.2;
Label Date="日期";
Label Oprice="开盘价";
Label Hprice="最高价";
Label Lprice="最低价";
Label Cprice="收盘价";
Label Vol="成交量";
Label Volmoney="成交金额";
Input
Date  Oprice Hprice Lprice Cprice Vol Volmoney;
Run;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:数据读入 delimiter informat missover informa 数据 SAS

QQ截图未命名.png (7.8 KB)

QQ截图未命名.png

SH600000.TXT
下载链接: https://bbs.pinggu.org/a-761455.html

61.67 KB

沙发
hopewell 发表于 2010-10-2 22:24:46
txt文件是怎么命名的?如果文件名是每个股票的代码,还不如用文件名给scode赋值呢
  1. data work.test;
  2.     retain Scode;
  3.     infile 'd:\sh600000.txt' dlm='09'x;
  4.     if _n_=1 then input Scode $6. #3 Date :yymmdd10. Oprice Hprice Lprice Cprice Vol Volmoney;
  5.     else input Date :yymmdd10. Oprice Hprice Lprice Cprice Vol Volmoney;
  6.     format date yymmdd10.;
  7. run;
复制代码

藤椅
hopewell 发表于 2010-10-2 22:50:02
假设txt文件符合SH000000/SZ000000命名规则,并统一存储在文件夹D:\gxa1下
  1. %macro import(path,out_ds);
  2.     options nomprint nosymbolgen nomlogic mcompilenote=all;
  3.     %if %sysfunc(exist(&out_ds)) %then %do;
  4.         proc datasets library=work nolist;
  5.             delete &out_ds;
  6.         quit;
  7.     %end;
  8.     %let filrf=mydir;
  9.     %let rc=%sysfunc(filename(filrf,&path));
  10.     %let did=%sysfunc(dopen(&filrf));
  11.     %do i=1 %to %sysfunc(dnum(&did));
  12.         %let memname=%sysfunc(dread(&did,&i));
  13.         %if %upcase(%scan(&memname,-1,'.'))=TXT %then %do;
  14.             data work._temp;
  15.                 length Scode $6.;
  16.                 infile "&path\&memname" dlm='09'x firstobs=3;
  17.                 Scode="%substr(&memname,3,6)";
  18.                 input Date :yymmdd10. Oprice Hprice Lprice Cprice Vol Volmoney;
  19.                 format date yymmdd10.;
  20.             run;
  21.             proc datasets library=work nolist;
  22.                 append base=&out_ds data=_temp;
  23.             quit;
  24.         %end;
  25.     %end;
  26.     %let rc=%sysfunc(dclose(&did));
  27.     proc datasets library=work nolist;
  28.         delete _temp;
  29.     quit;
  30. %mend;
  31. %import(D:\gxa1,out)
复制代码

板凳
pestation 发表于 2010-10-3 03:31:01
请问一下,这里的
  infile "&path\&memname" dlm='09'x firstobs=3;

后面的dlm='09'x 是一个特别的分隔符嘛??
谢谢

报纸
gxa1 发表于 2010-10-3 09:33:10
hopewell 太强大了,以后我就是你的fans之一!!!
非常感谢,达到的效果那个是好呀!!再次感谢

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-25 00:21