2016-10-21 130 views
3

試圖使用SPSS/Python我想更改某些變量的變量名稱。
例如,我需要所有變量的Python/SPSS重命名變量名稱

使用oldName = t1XXX更改爲新名稱= t01XXX

試圖用代碼,我發現在這裏(如下圖所示)來播放,但不能改變這種正確做我需要的。感謝任何提示!


來自Jignesh Sutar的示例;帶後綴從 - 全可變名稱合SPSS/34816192#34816192)

begin program. 
spss.Submit(r"set mprint on.") 
import spss, spssaux 
allvarlist=[str(v) for v in spssaux.VariableDict()] 
filteredvarlist=[v for v in allvarlist if v.endswith("_1")] 
spss.Submit("rename variables (\n" \ 
    + "\n".join(filteredvarlist) \ 
    + "\n=\n" \ 
    + "\n".join([v[:-2] for v in filteredvarlist]) \ 
    + ").") 
spss.Submit(r"set mprint off.") 
end program. 
+0

是您試圖做的是始終如一地轉換數字部分以兩位數字的變化?也就是說,如果它是t10xxx,那麼沒有改變呢? –

+0

感謝您的後續問題;我在數據中有不同的變體,這僅僅是一個例子。我認爲我的主要問題是,我不知道Python正則表達式如何選擇我想與SPSS語法交互的變量... :-) –

回答

2

這裏是一個程序來做到這一點。它首先創建一個以t開頭的所有名稱的後面跟一個數字後面跟一個非數字的變量字典。然後,它產生的重命名變量命令中處於領先0

這裏將是代碼:

import spss, spssaux 

vardict = spssaux.VariableDict(pattern="t\d\D") 
newnames = [v[0] + "0" + v[1:] for v in vardict.variables] 
cmd = """rename variables (%s=%s)""" % \ 
(" ".join(vardict.variables), " ".join(newnames)) 
spss.Submit(cmd) 
+0

美麗,這完美的作品!謝謝。你能讓我知道'cmd'部分是什麼嗎?對不起,我的無知... –