簡體   English   中英

SAS宏數據線SAS

[英]sas macro datalines sas

data macpro.bimodels_type;
infile datalines ;
input Model & $ model_class$ model_price model_frame$ DOpurchase;
*length Model$20. model_class$25. model_price4. ;
datalines;
Black Bora    Track        796   Aluminum  01Aug2009 
Delta Breeze  Road        400   CroMoly     23Aug2010 
Jet Stream      Track       1160  CroMoly    01Aug2009 
Mistral            Road        1995 Carbon Comp 01Jul2010 
Nor'easter      Mountain  900 Aluminum        05Jul2010 
Santa Ana      Mountain  459 Aluminum        20Jul2010 
Scirocco         Mountain  2300 Titanium        08Sep2011 
Trade Wind    Road          759 Aluminum       08Sep2011 

Model變量i中嘗試修復空白的地方,我使用了&語法,例如input Model & $等等...但是我無法在單列中修復Black Bora 我該如何解決這個問題。

在SAS已經確定字符變量的長度之后,您將無法更改它的長度。 如果在其他語句中使用變量之前顯式定義變量,則可以更輕松地實現此目的。

data bimodels_type;
   infile datalines truncover ;
   length Model $20 model_class $25 model_price 8 model_frame $20 DOpurchase 8 ;
   format DOpurchase date9. ;
   input Model & model_class model_price model_frame & DOpurchase :date.;
datalines;
Black Bora    Track        796   Aluminum  01Aug2009 
Delta Breeze  Road        400   CroMoly     23Aug2010 
Jet Stream      Track       1160  CroMoly    01Aug2009 
Mistral            Road        1995 Carbon Comp 01Jul2010 
Nor'easter      Mountain  900 Aluminum        05Jul2010 
Santa Ana      Mountain  459 Aluminum        20Jul2010 
Scirocco         Mountain  2300 Titanium        08Sep2011 
Trade Wind    Road          759 Aluminum       08Sep2011 
;

為了使&修飾符起作用,您需要在值之后和下一個值之前至少有兩個空格(實際上是定界符)。 因此,在數據中第四行將出現問題,因為日期之前沒有兩個空格。

您可以修復輸入數據。

Mistral            Road        1995 Carbon Comp  01Jul2010 

或者,如果您知道每條記錄都會有一個日期,則可以將其讀取為先前字符變量的一部分,然后將其取出。

data bimodels_type;
   infile datalines truncover ;
   length Model $20 model_class $25 model_price 8 model_frame $50 DOpurchase 8 ;
   format DOpurchase date9. ;
   input Model & model_class model_price model_frame $50.;
   DOpurchase=input(scan(model_frame,-1,' '),date11.);
   model_frame = substr(model_frame,1,length(model_frame)-9);
datalines;
Black Bora    Track        796   Aluminum  01Aug2009
Delta Breeze  Road        400   CroMoly     23Aug2010
Jet Stream      Track       1160  CroMoly    01Aug2009
Mistral            Road        1995 Carbon Comp 01Jul2010
Nor'easter      Mountain  900 Aluminum        05Jul2010
Santa Ana      Mountain  459 Aluminum        20Jul2010
Scirocco         Mountain  2300 Titanium        08Sep2011
Trade Wind    Road          759 Aluminum       08Sep2011
;

如果確實要在宏中包裝包含數據行的代碼(如標題所示),則此方法將無效。 數據線/卡是不能在宏內執行的語句。 或者,您可以將數據行保存在一個文本文件中,然后讀取該文件,該文件在宏代碼中有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM