[程式] SAS loading array 問題

看板Statistics作者 (林翰)時間5年前 (2019/03/14 05:47), 4年前編輯推噓2(204)
留言6則, 2人參與, 5年前最新討論串1/1
[軟體程式類別]: SAS [程式問題]: SAS loading arra相關問題 [軟體熟悉度]: 新手 [問題敘述]: 在看SAS Adv的書中 有關loading array部分 看完解釋 研究了兩小時還是不懂他的意思 data work.lookup1; array Targets{1997:1999,12} _temporary_; if _n_=1 then do i= 1 to 3; set sasuser.ctargets; array Mnth{*} Jan--Dec; do j=1 to dim(mnth); targets{year,j}=mnth{j}; end; end; 程式中sasuser.ctargets是一個3*13的table variables分別是 year Jan Feb ... Dec 像這樣 https://imgur.com/a/b4Jhyhn 想請教的是 _n_ = 1 說明的是對於哪個資料夾的iteration? 並且在接下來的 do i = 1 to 3裡面後續沒有 i 繼續執行 非常想不通為什麼這樣可以填滿targets的array 因為在code裡面並沒有看到指定第幾個row讀取 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 50.255.135.49 ※ 文章網址: https://www.ptt.cc/bbs/Statistics/M.1552513655.A.207.html

03/14 07:14, 5年前 , 1F
_n_=1裡面的外層迴圈那三圈每一圈會set 一筆資料進來,s
03/14 07:14, 1F

03/14 07:14, 5年前 , 2F
et進來的資料裡會有year欄位,它的值就表示了內層迴圈要
03/14 07:14, 2F

03/14 07:14, 5年前 , 3F
塞進哪一個row了
03/14 07:14, 3F

03/14 08:16, 5年前 , 4F
_n_ 是系統變數,指第一筆。所以if _n_ =1 then do; 用
03/14 08:16, 4F

03/14 08:16, 5年前 , 5F
在要一開始就做,且只做一次。
03/14 08:16, 5F
謝謝大大們的解答 但我的疑問比較偏向說 do i = 2時是讓系統做了什麼? 還有year的三個值分別是1997 1998 1999 那有哪個指令是讓SAS把year讀到1998 跟 1999的呢? 非常感謝

03/14 12:03, 5年前 , 6F
set
03/14 12:03, 6F
謝謝west大 那這樣說 省略if _n_ = 1 then do i = 1 to 3的話 是否也能讓array完整被loaded? 既然set可以一次讀完整個檔案 那為何需要if _n_ = 1還有外層三圈? 感謝回答! 感謝以上兩位大大解答 已發各100P表感謝! ※ 編輯: Lynnhan (71.192.89.193 美國), 03/28/2020 15:04:26
文章代碼(AID): #1SYNft87 (Statistics)