SAS CSV解析长字符串

时间:2017-11-04 21:49:46

标签: csv sas

我试图从CSV文件中读取排序数据,并且我遇到了涉及长字符串的问题。我附上了部分SAS输出和原始数据集的屏幕截图。 (该数据集来自Kaggle,关于Ted Talks。)

我遇到变量"标签"时遇到问题。基本上,我希望阅读标签并相应地对数据进行排序(即提及儿童或教育的标签将被纳入教育类别)。到目前为止,我仍然坚持阅读它们。任何帮助,将不胜感激!

到目前为止,这是我的代码:

data tedtalks;
infile 'O:\ted_main1.csv' dlm = ',' firstobs = 2;
informat name $80.; 
informat main_speaker $20.; 
informat speaker_occupation $60.;
informat title $80.;
input comments duration event $ film_date languages 
main_speaker $ name $ num_speaker published_date 
speaker_occupation $ tags $ title $ views
;
run; 

proc print data=tedtalks; 
run; 

CSV数据的前几行:

comments    duration    event   film_date   languages   main_speaker    name    num_speaker published_date  speaker_occupation  tags    title   views
4553 1164 TED2006   1140825600  60  Ken Robinson    Ken Robinson: Do schools kill creativity?   1   1151367060  Author/educator ['children', 'creativity', 'culture', 'dance', 'education', 'parenting', 'teaching']    Do schools kill creativity? 47227110
265 977 TED2006 1140825600  43  Al Gore Al Gore: Averting the climate crisis    1   1151367060  Climate advocate    ['alternative energy', 'cars', 'climate change', 'culture', 'environment', 'global issues', 'science', 'sustainability', 'technology']  Averting the climate crisis 3200520
124 1286    TED2006 1140739200  26  David Pogue David Pogue: Simplicity sells   1   1151367060  Technology columnist    ['computers', 'entertainment', 'interface design', 'media', 'music', 'performance', 'simplicity', 'software', 'technology'] Simplicity sells    1636292
200 1116    TED2006 1140912000  35  Majora Carter   Majora Carter: Greening the ghetto  1   1151367060  Activist for environmental justice  ['MacArthur grant', 'activism', 'business', 'cities', 'environment', 'green', 'inequality', 'politics', 'pollution']    Greening the ghetto 1697550

SAS Output

Excel CSV Data

1 个答案:

答案 0 :(得分:0)

如果您有分隔文件,那么您可能希望在INFILE语句中使用DSD选项。还要确保使用正确的分隔符。 INFORMAT语句不用于定义变量,而是用于附加有助于SAS知道如何从文本中读取变量的指令。 SAS已经知道如何读取字符变量,因此无需附加$ xx。 informats。而是使用LENGTH或ATTRIB语句来定义变量。

32,767是您制作角色变量的最长时间。确保将LRECL设置得足够长。

data tedtalks;
  infile 'O:\ted_main1.csv' dsd dlm='09'x firstobs=2 truncover lrecl=100000;
  length comments 8 duration 8 event $20 film_date languages 8
         main_speaker $100 name $200 num_speaker 8 
         published_date 8 speaker_occupation $100 
         tags $32767 title $200 views 8
  ;
  input comments -- views ;
run;

不确定这些日期的格式,但也许您可以将它们转换为日期。

标签看起来是JSON类型列表。使用标签来“分类”数据会很困难,但很容易使用它们来过滤数据。您可以保留它们并使用INDEXW()或FIND()等函数进行搜索。您可以使用SCAN()函数将它们解析为多个变量或多个观察值。