2011-05-10 4 views
2

최근에 절차/OO/기능적 배경에서 나온 Stata에 들어갔고 언어의 기본 요소를 이해하는 데 어려움을 겪고 있습니다.구문이없는 Stata 프로그래밍 언어?

예를 들어, "프로그램이 사용자가 표준 Stata 구문과 같은 문법에 따라 입력하는 인수를 해석 할 수 있도록 허용하는"syntax 명령이 있음을 발견했습니다. 이것이 어떤 명령이 공백으로 구분 된 인수로 주어진 변수 목록을 필요로하는 반면에 나머지는 쉼표로 구분 된 목록을 요구하는 이유입니다. 그러나 적용되는 (매개 변수) 구문 대신 자체 구문을 정의하는 프로그램의 아이디어는 이상하게 보입니다.

매크로 정의 및 확장 (`macro')에 대한 구문과 다른 언어로 알려진 로컬 변수가없는 것은 매우 흥미로운 구성입니다.

내 배경을 가진 사람들로 언어의 기본 개념을 설명하는 "STATA 자바에 대한 개발자"문서와 같은 뭔가가 있나요?

PS : 사과이 질문은 불분명 보인다합니다. 불행히도, 난

+0

"빠른 시작 안내서가 있습니까?"라는 질문에 불과합니까? 아니면 언어 기능에 대해 알고 싶습니까? 두 경우 모두 적어도 현재는 이러한 프로그래밍 기능이 필요하지 않을 것입니다. – Marcin

+0

@Marcin : 문제에 적용 할 수있는 것보다 언어를 이해하고 싶습니다. 내가이 기능이 필요 없다고 생각하는 이유는 무엇입니까? 이 기능을 사용하는 동료의 코드 기반을 인수해야합니다. 그 코드는 내가 발견 한 방법입니다. – blubb

+0

그런 기능을 사용하는 다른 언어에 익숙하기 때문에 생각합니다. 당신의 언어가 매우 펑키하지 않는 한, 능동적으로 요구하는 계산은 없을 것입니다. 새 코드에 이러한 기능을 배치하기 전에 나머지 언어에 대해 알아보십시오. – Marcin

답변

8

난 당신이 몇 가지 관련 사항을 위해 ... 찾고 있지만 여기에있는 것을 정확히 모르겠어요 :(이 시점에서보다 구체적인/명확한 질문을 공식화 수 없습니다. STATA는 유닉스를 작성하는 같은 종류의 것입니다 . 쉘 스크립트 또는 Windows 배치 파일은 각 행은 명령을 실행하고 첫 번째 단어는 명령 이름 규칙에 따라, 대부분의 명령은 다음과 같은 구조가 있습니다. [.]

command [varlist] [=exp] [if expression] [in range] [weight] [using filename] [, options] 

브래킷은 선택의 의미 (또는 사용할 수 없습니다) 명령에 따라 다릅니다. 일부 명령은 접두사 할 수 있습니다 (예 : by:, xi:, 또는 svy:)로 STATA 공사와 숙련 된 사용자에 의한 명령의 구문 때문에, 꽤 일치한다. 그러나 Stata 사용자도 명령을 쓰고, 때때로 이상한 것을 보게됩니다.

STATA 사용자가 명령을 쓰기

, 그들은 .ado 파일에 저장됩니다 (수도 있었죠되지 않음)과 program 명령을 사용하여 정의됩니다. 명령을 쓰는 것은 다른 언어로 함수를 작성하는 것과 비슷합니다 (예 : MatLab)

명령은 사용자가 직접 명령을 작성하는 데 사용됩니다. 명령을 실행하면 명령 이름 (command 위) 다음의 모든 내용이 로컬 매크로 `0'의 프로그램에 전달됩니다. 구문 명령은이 로컬 매크로를 구문 분석하므로 `varlist' 또는 `if' 등을 참조 할 수 있습니다. 이론 상으로는 `0'을 구문 분석 할 수 있지만 구문 명령을 사용하면 (기존 구문을 따르는 한) 사용자와 사용자가 훨씬 쉽게 사용할 수 있습니다. 나는 밑바닥에 모범을 보였다.

난 당신이 무슨 뜻인지 정확히 모른다 "다른 언어로 알려진 지역 변수의이 없다는 점." 매크로는 단일 문자열 또는 단일 숫자를 메모리에 저장합니다. Here's a comment Stata의 로컬/글로벌 매크로에 관해 썼습니다. 실제로 Stata의 프로그래밍 언어의 고유 한 기능입니다. 그들의 이름이 암시 하듯이, "로컬"매크로는 프로그램 (명령)이나 .do 파일 내에서만 사용 가능하며 "전역"매크로는 Stata 세션에서 사용 가능합니다.

Stata의 매크로에 익숙해지면 다른 언어로 그 매크로를 놓치기 시작했습니다. 그들은 꽤 편리합니다. (로컬/글로벌) 매크로와 기본 데이터 세트 외에, scalarmatrix 명령 (그리고 하나 또는 두 개의 다른 모호한 것들)을 사용하여 메모리에 "사물"을 저장할 수도 있습니다.

도움이 되었기를 바랍니다. Here's a list resources 도움이 될 것입니다.

예 :

program define myprogram 
    syntax varlist [if], [hello(string) yes] 
    macro list _0 _varlist _if _hello _yes 
    summarize `varlist' `if' 
    display "Here's the string in my hello option: `hello'" 
    if !missing("`yes'") di "Yes is on" 
    else     di "Yes is off" 
end 

sysuse auto.dta  
myprogram rep78 headroom if price > 5000 , hello("world") yes 
+0

당신은 그것을 못 박았습니다. 이 질문에 대한 답은 매듭을 풀어 놓았습니다. 감사! – blubb

1

몇 권 있지만, 일반적으로 통계 소프트웨어 솔루션 사이, 접근 "Y 사용자를위한 X의"를 제공합니다. 귀하의 질문에 대해서는, 먼저 본능을 사용하는 것이 좋습니다.

저는 약 10 년 전에 (프로그래밍 및 마크 업) 코드를 읽기 시작했으며 많은 언어로 코드를 작성할 수는 없지만 다소 쉽게 몇 가지 언어를 읽을 수 있습니다. Stata는 핵심 명령의 대부분이 이해하기 쉽고 적용하기 쉬운 over, if 또는 replace (자발적으로 다양한 명령문 집합을 취하는 것과 같은)과 같은 반복적 인 선택문과 함께 간단하기 때문에 Stata를 쉽게 발견했습니다.

Stata를 가르 칠 때 나는 항상 학생들이 help 페이지를 내가 사용하는만큼 많이 사용하도록하는 데 어려움을 겪고 있습니다 (그리고 나는 R 에서처럼 쉽게 접근 할 수 있다는 사실을 아주 좋아합니다). 필자는 구문 표시를 바로 읽을 수 있다는 사실을 고려하여 역설을 설명합니다. 귀하의 질문에 대한 이전 회신은 문법을 잘 설명합니다.

추가 마일은 Stata가 utilities 폴더에있는 [R], [U] 및 특히 [P] 핸드북을 여는 데 있습니다. 프로그래머와 교육 통계 전문가 모두에게 흥미로운 세부 정보가 있습니다. 이것은 매크로와 루프를 사용하여, local/globalforeach/while과 같은 명령 논리를 넘어서는 것을 배웠던 곳입니다 (이 용어가 올바르게 이해되면 Stata는 Turing-complete 임).

매크로 루프에서 작은 따옴표 나 큰 따옴표를 사용할 때 Stata가 때로는 약간의 어려움이 있지만 그렇지 않으면 매우 간단합니다. 재미있어!