2016-12-03 33 views
0

Joe提供的解決方案最像我想做的,但我需要在查看數據時稍微調整它。這個問題我現在正在將他的語法到我的全INFILE語句,因爲我得到一個有點失落:更多有條件的Infile語句任務

data test; 
     infile "@myfile" delimiter = ',' MISSOVER DSD lrecl=32767 firstobs=2 ; 
     informat EventTypes best32. ; 
     informat EventLabels $21. ; 
     informat EventID best32. ; 
     informat Player_ID best32. ; 
     informat ExpandedMinute best32. ; 
     informat Second best32. ; 
     informat TeamID best32. ; 
     informat EndY best32. ; 
     informat EndX best32. ; 
     informat Y best32. ; 
     informat X best32. ; 
     informat IsTouch $5. ; 
     informat ID best32. ; 
     informat Minute best32. ; 
     informat Period $10. ; 
     informat Type $25. ; 
     informat OutcomeType $12. ; 
     informat Area1 $25. ; 
     informat Area2 $25. ; 
     informat ParamVal1 $15. ; 
     informat ParamVal2 $15. ; 
     informat MatchID best32. ; 
     informat MatchDate ddmmyy10. ; 
     informat HomeTeamName $100. ; 
     informat AwayTeamName $100. ; 
     informat FTScore $5. ; 
     informat HomeScore best32. ; 
     informat AwayScore best32. ; 
     format EventTypes best12. ; 
     format EventLabels $21. ; 
     format EventID best12. ; 
     format Player_ID best12. ; 
     format ExpandedMinute best12. ; 
     format Second best12. ; 
     format TeamID best12. ; 
     format EndY best12. ; 
     format EndX best12. ; 
     format Y best12. ; 
     format X best12. ; 
     format IsTouch $5. ; 
     format ID best12. ; 
     format Minute best12. ; 
     format Period $10. ; 
     format Type $25. ; 
     format OutcomeType $12. ; 
     format Area1 $25. ; 
     format Area2 $25. ; 
     format ParamVal1 $15. ; 
     format ParamVal2 $15. ; 
     format MatchID best12. ; 
     format MatchDate ddmmyy10. ; 
     format HomeTeamName $100. ; 
     format AwayTeamName $100. ; 
     format FTScore $5. ; 
     format HomeScore best12. ; 
     format AwayScore best12. ; 
     input 
     EventTypes 
     EventLabels $ 
     EventID 
     Player_ID 
     ExpandedMinute 
     Second 
     TeamID 
     EndY 
     EndX 
     Y 
     X 
     IsTouch $ 
     ID 
     Minute 
     Period $ 
     Type $ 
     OutcomeType $ 
     Area1 $ 
     Area2 $; 
     /*ParamVal $*/ 
     input @; 
     if scan(_infile_,19,',') not in ('Back', 'Defence', 'Forward', 'Left', 'Midfield', 'Right') then 
     input ParamVal1; 
     else 
     input ParamVal2 $; 
     input 
     MatchID 
     MatchDate 
     HomeTeamName $ 
     AwayTeamName $ 
     FTScore $ 
     HomeScore 
     AwayScore 
     ; 
     run; 

正如你所看到的語法是不太正確的在這裏,我不知道如何解決它。我需要修改哪些內容才能輸入其他字段中的條件邏輯?

感謝

回答

1

基本的解決方案來解決現有的代碼是尾隨@添加到所有,但最後一個輸入的語句。

PROC IMPORT確實會生成一些難看的代碼。這是一個更容易處理的更新版本。

data test; 
    infile "@myfile" DLM = ',' TRUNCOVER DSD lrecl=32767 firstobs=2 ; 
    length 
    EventTypes 8 EventLabels $21 EventID 8 Player_ID 8 
    ExpandedMinute 8 Second 8 
    TeamID 8 
    EndY 8 EndX 8 Y 8 X 8 
    IsTouch $5 
    ID 8 Minute 8 Period $10 Type $25 OutcomeType $12 
    Area1 $25 Area2 $25 
    ParamVal1 $15 ParamVal2 $15 
    MatchID 8 MatchDate 8 HomeTeamName $100 AwayTeamName $100 
    FTScore $5 HomeScore 8 AwayScore 8 
    ; 
    informat MatchDate ddmmyy10. ; 
    format MatchDate ddmmyy10. ; 
    input EventTypes -- Area2 @; 
    if Area2 not in ('Back', 'Defence', 'Forward', 'Left', 'Midfield', 'Right') then 
    input ParamVal1 @ 
    ; 
    else input ParamVal2 @; 
    input MatchID--AwayScore ; 
run; 

如果你真的打算PARMVAL1是一個數字,那麼你需要改變它是如何定義的。在代碼上面的變量是由LENGTH語句定義的。在PROC IMPORT生成的代碼中,定義爲暗示通過INFORMAT語句中用於該變量的信息。