2013-11-28 60 views
2

我想在多個SPSS數據文件上運行以下代碼(而不必分別打開每個文件並單獨運行代碼等),但不知道如何編寫適當的宏。非常感謝您的幫助。謝謝!SPSS Macro在多個數據文件中運行聚合命令

sort cases by ID(A) TEST_ID(A). 


If RESULT='Positive' RESULTS=1. 
If RESULT='Negative' RESULTS=0. 


AGGREGATE OUTFILE='C:\Desktop\\072013-aggregated.sav' 
/PRESORTED 
/BREAK=ID 
/CLINIC=FIRST(CLINIC) 
/SEX=FIRST(SEX) 
/DOB=FIRST(DOB). 

回答

1

你不能用宏做這樣的事情,但你可以用SPSSINC PROCESS FILES擴展命令來完成。這需要(免費的)Python Essentials。較新版本的統計信息在Essentials中包含此命令。如果它不在你的版本中,你可以下載它。該命令包含傳統的SPSS語法和對話框界面。

Python Essentials和各種擴展命令可通過SPSS社區網站www.ibm.com/developerworks/spssdevcentral獲取。

1

我不同意@JKP。可以用宏來完成。

請考慮其他選項。嘗試在一個文件中添加所有文件(ADD FILES命令)。使用IN子命令創建文件指示器(請參閱ADD FILES文檔)。在組合文件上只運行一次命令。

1

您可以輕鬆地重複在SPSS統計使用宏像下面的文件:

***Defining the path. 

DEFINE !Path() 'C:\Documents and Settings\admin\Desktop\' 
!ENDDEFINE. 
***You can seperate output paths from input paths and make another macro like above. 

DEFINE !agg_loc (!POS=!CMDEND) . 
!DO !var !IN (!1) 
GET FILE=!quote(!CONCAT(!unquote(!eval(!Path)),!var,".sav")). 
DATASET NAME !var. 
DATASET ACTIVATE !var. 

sort cases by ID(A) TEST_ID(A). 
If RESULT='Positive' RESULTS=1. 
If RESULT='Negative' RESULTS=0. 

AGGREGATE OUTFILE=!quote(!CONCAT(!unquote(!eval(!Path)),!var,"_output_",".sav")) 
    /PRESORTED 
    /BREAK=ID 
    /CLINIC=FIRST(CLINIC) 
    /SEX=FIRST(SEX) 
    /DOB=FIRST(DOB). 

!DOEND. 
EXECUTE. 
!ENDDEFINE. 

***Calling the macro. 

!agg_loc dsn_abc. 
!agg_loc dsn_xyz. 

**Here dsn_abc,dsn_xyz are file names present at desktop , you can add more file names similarly if there are more files to be read and processed 

**The outcome will present at desktop appended with _output_ , e.g dsn_abc_output_.sav is output for first processing and so on.